使用c Token-Pasting访问struct中的字段

Mot*_*oti 6 c struct

我正在尝试使用c标记粘贴(##)来访问struct字段,如下所示:

typedef struct
{
   int a;
   int b;
} TMP_T;

#define BUILD_FIELD(field) my_struct.##field

int main()
{
     TMP_T my_struct;
     BUILD_FIELD(a) = 5;
     return 0;
}
Run Code Online (Sandbox Code Playgroud)

但在编译期间出现以下错误:错误:粘贴"." 并且"a"不提供有效的预处理令牌

我想补充一点:

 typedef struct {
 int a;
 int b;
 }TMP_T;

 #define BUILD_FIELD(my_struct,field) my_struct.##field


  void func(char* name)
  {
TMP_T tmp_str;
if((name == "a")  || (name == "b"))
{
    BUILD_FIELD(tmp_str, name) = 7;
    printf("%d \n", BUILD_FIELD(a) );
}


 }

 int main()
 {

       func("a");
       return 1;
 }
Run Code Online (Sandbox Code Playgroud)

我应该如何使用宏来访问特定的结构和字段.可能吗?或者因为它是预先编译的,所以无法为各个字段定义(a,b)

谢谢Moti

per*_*eal 9

您根本不需要令牌粘贴:

#define BUILD_FIELD(field) my_struct.field
Run Code Online (Sandbox Code Playgroud)

根据gcc手动令牌粘贴应该在串联后产生标识符或数字.错误是由于.a不是.