包含ucontext.h时无法编译

时间:2013-12-18 18:17:00

标签: 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行如何引发这些错误? 不知道该怎么做,因为这是一个标准的sys标头。

1 个答案:

答案 0 :(得分:3)

这个问题可能是由代码中的#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,并且您的代码变得不那么容易理解,并且对于可能想要与您协作的其他程序员来说可读性较差。