c++ - 为什么 token 连接在 C++ 中不起作用?

标签 c++ struct macros

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

#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)。如何使用 token 串联生成字段名称?

最佳答案

去掉 FIELD 定义中的 {}

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

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

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

关于c++ - 为什么 token 连接在 C++ 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38705670/

相关文章:

c++ - 作为宏参数给出的先前定义的常量被视为字符串文字

c++ - 打破C++中的封装

c++ - 在 C++ 中,导入 .exe 是什么意思?

c - 将结构传递给函数

当我将参数定义为 struct * 时,编译器说参数是 struct ** 类型

mongodb - 无法将 mongo 文档 ID 解码到结构字段上

python - if 语句范围内的 C++ 宏未编译

c++ - 复制类构造函数 C++

C++ 在所有其他类中使用(通信)对象

Scheme 中的宏和内部定义