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.
我在 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.