编译错误:重新定义联合名称

时间:2014-05-16 13:09:23

标签: gcc compiler-errors posix mutex unions

我在这里有这段代码而且我得到一个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声明(之后)。谢谢

1 个答案:

答案 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,而不是依赖于平台检查。