是不是在linux上定义了`stack_t`类型?

Jim*_* Lu 4 c linux ucontext

Linux平台是Ubuntu 12.04

我的源代码中包含以下标头:

#include <unistd.h>
#include <signal.h>
#include <ucontext.h>

...
Run Code Online (Sandbox Code Playgroud)

然而,当我编译它时,它会抱怨 /usr/include/x86_64-linux-gnu/sys/ucontext.h:139:5: error: unknown type name 'stack_t'

我用Google搜索并发现stack_t应该定义signal.h,但这里似乎没有定义?

jim*_*ara 10

这是一个评论,但我不能让它在那里可读.抱歉.

#define 有以下其中一个:

 _BSD_SOURCE || _XOPEN_SOURCE >= 500 ||
           _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
           || /* Since glibc 2.12: */ _POSIX_C_SOURCE >= 200809L
Run Code Online (Sandbox Code Playgroud)

  • 您可能正在使用`-std = c99`或`-std = c11`; 你可能最好使用`-std = gnu99`或`-std = gnu11`.或者你可以添加一个合适的POSIX定义(例如`#define _XOPEN_SOURCE 700`),或者(如你所选择的那样)`#define _BSD_SOURCE`.决定何时提供额外的设施以及何时不这样做是很复杂的. (3认同)
  • @BeyondSora:`stack_t`是非标准的.通过使用[feature test macros](http://www.gnu.org/software/libc/manual/html_node/Feature-Test-Macros.html)启用任何非标准的内容. (2认同)