POSIX sigevent 没有用 c11 编译

POSIX sigevent not compiling with 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() 函数编译手册中的示例时,首次出现此问题。情况是一样的,除了更多的错误。

头文件 <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

这是因为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.