Ошибка компиляции: переопределение имени объединения
У меня есть этот кусок кода здесь, и я получаю ошибку GCC: переопределение union semun в самом начале этого кода
union semun {
int val; /* Value for SETVAL */
struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */
unsigned short *array; /* Array for GETALL, SETALL */
struct seminfo *__buf; /* Buffer for IPC_INFO
};
Эта программа о связи с мьютексами. Я не думаю, что речь идет о других частях программы, потому что ошибка появляется здесь, прямо в первой строке, и этот код находится вне основного, в начале программы, поэтому до этого нет никакого другого объявления объединения. (и после). Спасибо
1 ответ
В отличие от X/Open, некоторые платформы определяют union semun
в их заголовках (особенно в sys/sem.h
).
Вы можете проверить соответственно, используя соответствующие макросы идентификатора платформы:
#if (defined(__GNU_LIBRARY__) && !defined(_SEM_SEMUN_UNDEFINED)) \
|| defined(__FreeBSD__) || ...
/* union semun is defined by including <sys/sem.h> */
#else
union semun {
// ...
};
#endif
Если у вас есть система мета-make для вашего пакета (configure, CMake и т. Д.), Вы можете проверить наличие union semun
на этапе настройки, а не полагаться на проверки платформы.