POSIX sigevent没有用c11编译

时间:2016-01-06 22:39:46

标签: c gcc posix c11

我在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()函数的示例时,首先出现此问题。情况是一样的,除了更多的错误。

2 个答案:

答案 0 :(得分:4)

标题<signal.h>是标准C的一部分。但POSIX为其添加了更多内容。由于struct sigevent不是C,而是POSIX -std=c11禁用(可能是ifdef某处)。

gcc test.c

有效,因为默认情况下gcc启用某些级别的POSIX函数和很多GNU扩展。

用以下内容编译:

gcc -std=c11 -D_POSIX_C_SOURCE=200809 file.c

答案 1 :(得分:0)

这是因为posix符号不是C标准的一部分。这可以通过多种方式解决,

  • gcc -std=c11 -D_XOPEN_SOURCE=700 file.c
  • gcc -std=c11 -D_GNU_SOURCE file.c
  • gcc -std=gnu11 file.c

这里700表示X Open7 Posix 2008。