【发布时间】:2016-01-06 22:39:45
【问题描述】:
我有一个简单的 C 应用程序,它使用 POSIX struct sigevent。
#include <signal.h>
int main(int argc, char *argv[])
{
struct sigevent sig_event;
return 0;
}
当我这样编译时:
gcc test.c
没关系。当我强制 C11 模式时,它会失败:
gcc test.c --std=c11
test.c: In function ‘main’:
test.c:5:21: error: storage size of ‘sig_event’ isn’t known
struct sigevent sig_event;
我在 Ubuntu 15.10 上使用 gcc 5.2.1。任何想法是什么导致了这些错误?当我尝试从手册编译 timer_create() 函数的示例时,首先出现此问题。情况是一样的,除了更多的错误。
【问题讨论】:
-
这一切都归结为不允许编译器在标准头文件中转储非标准标识符。当为严格标准 C 编译时,无论是 C11 还是更早的标准,gcc 都会停止在标准头文件中转储各种垃圾。