MST

星途 面试题库

面试题:C语言##运算符连接标记在复杂宏定义中的应用

编写一个宏定义,该宏接受两个参数,使用##运算符将它们连接起来,并通过这个连接的标识符访问结构体成员。假设存在一个结构体定义 `struct MyStruct { int value; };`,在宏调用时要确保能正确访问到结构体实例的成员。
40.9万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>

struct MyStruct { 
    int value; 
};

#define CONNECT_AND_ACCESS(struct_name, member_name) struct_name##_##member_name.value

int main() {
    struct MyStruct struct1 = {10};
    // 假设宏调用时传入 struct1 和 value
    int result = CONNECT_AND_ACCESS(struct1, value); 
    printf("The value is: %d\n", result);
    return 0;
}

在上述代码中:

  1. 定义了 struct MyStruct 结构体,它有一个 int 类型的成员 value
  2. 使用宏定义 CONNECT_AND_ACCESS,它接受两个参数 struct_namemember_name,使用 ## 运算符将它们连接起来,并通过连接后的标识符访问结构体成员。
  3. main 函数中,创建了 struct MyStruct 的实例 struct1 并初始化其 value 为 10。然后通过宏调用获取 struct1value 成员的值并打印。