Когда вы получаете такую ошибку, это почти всегда означает, что заголовок, в данном случае, вероятно, один из системных заголовков, определил макрос с тем же именем, которое вы выбрали для своей переменной, но с расширением, которое недопустимо в качестве идентификатора.
Вы не увидите проблемы, если заголовок определяет:
#define ifr_addr pwr_address
Вы видите проблему, если, как вы заметили в комментарии , расширение (в include/uapi/linux/if.h
, около строки 258):
#define ifr_addr ifr_ifru.ifru_addr
Макрос предназначен для упрощения доступа к элементам объединения без необходимости каждый раз указывать имя члена объединения. В такие моменты вы задаетесь вопросом - стоило ли это того? (Я вижу это в кодовой базе, над которой я работаю ежедневно - много. Иногда трудно понять, к чему коду * обращаются.)
Хотя можно было бы использовать:
#undef ifr_addr
перед тем, как определить собственную переменную с таким именем, вы наступаете на тонкий лед. Лучше всего принять, что имя выгружено, и использовать что-то еще, хотя это и раздражает. Можно использовать ifr_srcaddr
, чтобы сопоставить / контрастировать ifr_dstaddr
.