3

私はこの最小限の 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 をサポートしていないということです。そのためのグーグルは、有用な情報を明らかにしませんでした. ケースは何ですか?

(私は gcc-4.9 で glibc-2.19 を使用しています。これは debian jessie、amd64 です。)

4

2 に答える 2

3

-std=c11C11規格準拠モードです。<ucontext.h>厳密にはC11の一部ではありません(Stasの回答を参照)。

これらのヘッダーを使用するには、拡張モードを使用するか、サポートする予定のプラットフォーム ( 、、、またはその他)-std=gnu11に応じて適切なマクロを定義します。_POSIX_C_SOURCE_BSD_SOURCE_XOPEN_SOURCE_GNU_SOURCE

機能を有効にするマクロの詳細については、このページを参照してください。

于 2015-09-06T18:34:59.290 に答える