我有这个最小的 helloworld,扩展包括ucontext.h
:
#include <ucontext.h>
#include <stdio.h>
int main(int argc, char** argv) {
printf ("hello world!\n");
return 0;
}
它使用 gcc-4.9 进行编译而不发出警告(gcc -c hw.c -Wall
).
但如果我切换到 c11 标准(gcc -std=c11 -c hw.c -Wall
),我收到以下错误:
$ gcc -std=c11 -c hw.c -Wall
In file included from /usr/include/ucontext.h:26:0,
from hw.c:1:
/usr/include/x86_64-linux-gnu/sys/ucontext.h:137:5: error: unknown type name ‘stack_t’
stack_t uc_stack;
^
我的第一个想法是 glibc 不支持 c11。谷歌搜索并没有透露有用的信息。这是什么情况?
(我使用 glibc-2.19 和 gcc-4.9。它是 debian jessie,amd64。)
-std=c11
是 C11 标准兼容模式。<ucontext.h>
严格来说不是 C11 的一部分(参见 Stas 的回答)。
要使用这些标头,请使用扩展模式-std=gnu11
或根据您打算支持的平台定义适当的宏(_POSIX_C_SOURCE
, _BSD_SOURCE
, _XOPEN_SOURCE
, _GNU_SOURCE
或者也许是其他人)。
请参阅此页面了解更多信息 http://www.gnu.org/software/libc/manual/html_node/Feature-Test-Macros.html关于启用功能的宏。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)