MST

星途 面试题库

面试题:C语言中##和#运算符在宏定义中的基础运用

请编写一个宏定义,使用##运算符连接两个标识符,使用#运算符将参数转换为字符串常量。例如,定义宏 `CONCAT(a, b)` 实现将 `a` 和 `b` 连接成一个新的标识符,`STRINGIFY(x)` 实现将 `x` 转换为字符串。并给出调用示例及解释。
30.6万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
// 连接两个标识符的宏定义
#define CONCAT(a, b) a ## b

// 将参数转换为字符串常量的宏定义
#define STRINGIFY(x) #x

// 调用示例
#include <stdio.h>

int main() {
    // 连接两个标识符
    int CONCAT(var, 1) = 10;
    printf("CONCAT(var, 1)的值为: %d\n", CONCAT(var, 1)); 

    // 将参数转换为字符串
    printf("STRINGIFY(1 + 2)的结果为: %s\n", STRINGIFY(1 + 2)); 

    return 0;
}

解释:

  1. CONCAT(a, b) 宏使用 ## 运算符将 ab 连接成一个新的标识符。在示例中,CONCAT(var, 1) 会被替换为 var1,并定义了一个 int 类型变量 var1 且赋值为 10
  2. STRINGIFY(x) 宏使用 # 运算符将 x 转换为字符串常量。在示例中,STRINGIFY(1 + 2) 会被替换为 "1 + 2",然后通过 printf 输出。