包含ucontext.h时无法编译

使用gcc,编译使用ucontext.h的东西的时候会出现这些错误

/usr/include/sys/ucontext.h: At top level: /usr/include/sys/ucontext.h:138: error: expected identifier or '(' before numeric constant /usr/include/sys/ucontext.h:139: error: expected ';' before 'stack_t' 

看看ucontext.h,这是什么似乎导致:

  134 /* Userlevel context. */ 135 typedef struct ucontext 136 { 137 unsigned long int uc_flags; 138 struct ucontext *uc_link; 139 stack_t uc_stack; 140 mcontext_t uc_mcontext; 141 __sigset_t uc_sigmask; 142 struct _libc_fpstate __fpregs_mem; 143 } ucontext_t; 

第138和139行怎么能提出这些错误? 不知道该怎么做,因为这是一个标准的sys头。

这个问题可能是由代码中的#define引起的,它将uc_link定义为某个整数。

例:

 #define uc_link 22 

在Unix / Linux中找到它最有效的方法是运行grep -r "uc_link" . 在您的源代码目录。 如果你使用git来管理你的源代码,你可以用git grep "uc_link"代替。

如果这个定义存在于一个文件中,并且在其中使用了ucontext.h,那么你应该尝试将你的ucontext逻辑从需要这个#define的逻辑中分离出来。

另外,我必须注意到#define不是ALL_CAPS是不好的做法。 其中一个原因就是您遇到的问题,另一个原因是每个人都希望他们是ALL_CAPS,而且您的代码变得不那么容易理解,对于其他想要与您协作的程序员来说,可读性会降低。