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

Ben*_*Ben 2 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);
}
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*Cox 6

合并令牌是用 ##

以下更改应该有效:

#define E(Structure, Index) Structure.var_##Index
Run Code Online (Sandbox Code Playgroud)


Mik*_*CAT 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);
}
Run Code Online (Sandbox Code Playgroud)