我在这里有这段代码而且我得到一个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
};
该程序是关于与互斥锁通信的。我不认为它是关于程序的其他部分,因为错误来自这里,就在它的第一行,并且这个代码在main之外,在程序的开头,所以之前没有任何其他的union声明(之后)。谢谢
答案 0 :(得分: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
如果你的软件包有meta-make系统(configure,CMake等),你可以在配置阶段检查是否存在union semun
,而不是依赖于平台检查。