为什么令牌连接在C ++中不起作用?

时间:2016-08-01 18:27:49

标签: c++ struct macros

我有以下代码,我想以编程方式访问struct的字段:

#include <stdio.h>
#include <stddef.h>

#define FIELD(NAME, NUM)  {NAME##NUM}


struct SFOO
{
    int i;
    float   f1;
    float   f2;
    char    c;
};

int main() {
    printf("Offset of 'f1' is %u", offsetof(SFOO, f1));
    printf("Offset of 'f1' is %u", offsetof(SFOO, FIELD(f, 1)));
}

main()中的第一行有效但第二行无法编译(MSVC 2012)。如何使用标记串联生成字段名称?

1 个答案:

答案 0 :(得分:3)

删除{定义中的}FIELD

#define FIELD(NAME, NUM)  NAME##NUM

根据您之前的定义,您的print语句会扩展为offsetof宏不接受的内容:

    printf("Offset of 'f1' is %u", offsetof(SFOO, {f1}));