Compiler errors 有些定义在gcc中编译成功,但g++;失败

Compiler errors 有些定义在gcc中编译成功,但g++;失败,compiler-errors,g++,Compiler Errors,G++,我从projectprops-3.3.9:readproc.c文件中复制了一些代码 然后使用gcc编译success,并执行access >但现在我想用C++来编码,但是G++编译错误! g++报告错误: expression of type 'void' is illegal #define F(x) {#x, sizeof(#x)-1, (long)(&&case_##x-&&base)},

我从project
props-3.3.9
readproc.c
文件中复制了一些代码

然后使用gcc编译success,并执行access

<> >但现在我想用C++来编码,但是G++编译错误! g++报告错误:

expression of type 'void' is illegal
#define F(x) {#x, sizeof(#x)-1, (long)(&&case_##x-&&base)},
                                                    ^
readproc.c:122:9:in expansion of macro ‘F’
     F(VmHWM)
     ^
以下是代码:

#define LABEL_OFFSET
typedef struct status_table_struct {
    unsigned char name[7];        // /proc/*/status field name
    unsigned char len;            // name length
#ifdef LABEL_OFFSET
    long offset;                  // jump address offset
#else
    void *addr;
#endif
} status_table_struct;


#ifdef LABEL_OFFSET
#define F(x) {#x, sizeof(#x)-1, (long)(&&case_##x-&&base)},
#else
#define F(x) {#x, sizeof(#x)-1, &&case_##x},
#endif
#define NUL  {"", 0, 0},


static const status_table_struct table[] = {
    F(VmHWM)
    NUL NUL
    F(VmLck)
    NUL
    F(VmSwap)
    F(VmRSS)
    NUL
    F(VmStk)
    NUL
    F(Tgid)
    F(State)
};
#undef F
#undef NUL


base:
case_Name:
case_ShdPnd:
case_SigBlk:
case_SigCgt:
case_SigIgn:
case_SigPnd:
case_State:

语法有什么问题?

使用g++5.4.0,我可以通过以下方式编译
readproc.c
():

  • restrict
    替换为
    \u restrict
    \u(全部39次)。
    >限制是C中的一个有效关键字(用C99引入),C++标准没有定义它。GCC和clang确实支持
    \uuuuuuuuuuuuuuuuuuuuuuuuu
    关键字作为扩展

    有关限制的更多详细信息,请参阅

  • -fppermissive
    添加到编译命令行。这会缓解一些编译器错误(例如无效指针强制转换),并将它们转化为警告。确保查看生成的警告,以便不会忽略实际错误

由于上面粘贴的代码取自该文件,我认为它也应该编译(尽管我还没有看到您报告的错误)

使用g++5.4.0,我能够通过以下方式编译
readproc.c
():

  • restrict
    替换为
    \u restrict
    \u(全部39次)。
    >限制是C中的一个有效关键字(用C99引入),C++标准没有定义它。GCC和clang确实支持
    \uuuuuuuuuuuuuuuuuuuuuuuuu
    关键字作为扩展

    有关限制的更多详细信息,请参阅

  • -fppermissive
    添加到编译命令行。这会缓解一些编译器错误(例如无效指针强制转换),并将它们转化为警告。确保查看生成的警告,以便不会忽略实际错误

由于上面粘贴的代码取自该文件,我认为它也应该编译(尽管我还没有看到您报告的错误)

你能发布成功编译的C代码来提供上下文吗?这段代码本身不会用gccit编译,似乎我不能发布太多代码,所以我可以在github上给出url,它是procps-v3.3.9/proc/readproc.c:114上的源代码,请帮助我发布成功编译的c代码,以便提供上下文?这段代码本身不会用gccit编译,似乎我不能发布太多的代码,所以我可以在github上给出url,它是procps-v3.3.9/proc/readproc.c:114上的源代码,请帮助我得到一些新的关键字,比如restrict,-fpermission,attribute..我有一些新的关键字,比如restrict,-fpermission,attribute。。