为什么这个宏不能像我想的那样工作?

时间:2020-09-01 13:45:17

标签: c macros structure c-preprocessor

我还是C的新手,所以请忍受。

我正在尝试能够通过索引引用结构的元素。我认为宏可以解决问题,但显然不行。谁能解释以下原因为何无效?

#include <stdio.h>

#define E(Structure, Index) Structure.var_Index

typedef struct test{
    int var_0;
}TEST;

int main(){
    TEST Test;
    
    E(Test, 0) = 0;
    
    return(0);
}

我的IDE提示“在'struct test'中没有名为'var_Index'的成员,”但是在宏的Index单词前没有#。

2 个答案:

答案 0 :(得分:6)

使用##

完成令牌合并

以下更改应该起作用:

#define E(Structure, Index) Structure.var_##Index

答案 1 :(得分:5)

var_Index是一个令牌,编译器(预处理器)不会显示为Index

您可以使用##运算符将其连接到宏中的令牌。

#include <stdio.h>

#define E(Structure, Index) Structure.var_##Index

typedef struct test{
    int var_0;
}TEST;

int main(){
    TEST Test;
    
    E(Test, 0) = 0;
    
    return(0);
}
相关问题