我正在尝试使用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
您根本不需要令牌粘贴:
#define BUILD_FIELD(field) my_struct.field
Run Code Online (Sandbox Code Playgroud)
根据gcc手动令牌粘贴应该在串联后产生标识符或数字.错误是由于.a不是.