使用 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 行如何引发这些错误? 不知道该怎么做,因为这是标准的系统头。
最佳答案
此问题可能是由代码中某处的 #define
引起的,该代码将 uc_link 定义为某个整数。
示例:
#define uc_link 22
在 Unix/Linux 中查找它的最有效方法是在源代码目录中运行 grep -r "uc_link".
。
如果您使用 git 来管理源代码,则可以使用 git grep "uc_link"
来代替。
如果此定义存在于一个文件中,并且您在其中使用 ucontext.h,那么您应该尝试将 ucontext 逻辑与需要此 #define
的逻辑分离。
此外,我必须指出,使用非 ALL_CAPS 的 #define
是一种不好的做法。原因之一是您遇到的问题很好地体现了这一点,另一个原因是每个人都希望它们全部大写,因此您的代码对于其他可能想要与您合作的程序员来说变得不太容易理解和可读。
关于包含 ucontext.h 时无法编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20665478/