首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未用c11编译的POSIX

未用c11编译的POSIX
EN

Stack Overflow用户
提问于 2016-01-06 22:39:45
回答 2查看 586关注 0票数 3

我在C中有一个简单的应用程序,它使用的是POSIX结构σ事件。

代码语言:javascript
复制
#include <signal.h>

int main(int argc, char *argv[])
{
    struct sigevent sig_event;

    return 0;
}

当我像这样编译它时:

代码语言:javascript
复制
gcc test.c

它是好的。强制C11模式时,它会失败:

代码语言:javascript
复制
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()函数的示例时,首先出现了这个问题。情况是一样的,除了更多的错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-06 22:47:19

<signal.h>是标准C的一部分,但是POSIX增加了更多。由于struct sigevent不是C,而是POSIX中的,所以-std=c11禁用(可能是某个地方的ifdef )。

代码语言:javascript
复制
gcc test.c

之所以工作,是因为gcc默认启用了一定级别的POSIX函数和许多GNU扩展。

编译它时:

代码语言:javascript
复制
gcc -std=c11 -D_POSIX_C_SOURCE=200809 file.c
票数 4
EN

Stack Overflow用户

发布于 2019-10-23 17:50:54

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34644220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档