包含 ucontext.h 时无法编译

标签 c linux redhat

使用 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/

相关文章:

linux - 如何递归下载RPM依赖?

c++ - 按值传递结构是否被压入堆栈?

c - 通配符匹配字符串

python - pyinstaller ImportError 错误 - 如何解决?

linux - 当 ssh 连接关闭时,SIGHUP 的原始发送者是谁?

linux - emacs24 在启动时丢失窗口框架

linux - Samba 错误 : "Incorrect Function"

linux - 哪些rpm包可以用来获取系统安装日期

c - 字符串比较的段错误

c - char* 和 UBYTE* (unsigned char*) 之间的类型转换