使用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 header 。
最佳答案
此问题可能是由代码中某处的#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
是一个不好的做法。原因之一可以很好地表示您遇到的问题,另一个原因是每个人都希望它们是ALL_CAPS,并且您的代码对于其他想要与您合作的程序员来说也较难理解和理解。