在 C 语言的宏定义中,#、## 和 \ 是三个特殊的预处理操作符,它们在宏定义中具有不同的作用:
# 操作符:
用于将宏参数转换为字符串字面量。
当在宏定义中使用 # 时,它会把传入的参数转换为一个字符串常量。
例如:
#define STRINGIFY(x) #x
#define TOSTRING(x) STRINGIFY(x)
int main() {
printf("%s\n", TOSTRING(hello)); // 输出 "hello"
return 0;
}
## 操作符:
用于连接两个符号,形成一个新的符号。
这个操作符通常用于宏定义中,以动态地创建标识符或函数名。
例如:
#define CONCAT(a, b) a##b
int main() {
int xy = 10;
printf("%d\n", CONCAT(x, y)); // 输出 10
return 0;
}
\ 操作符:
用于在宏定义中进行行 continuation(行延续)。
当宏定义的定义跨越多行时,可以在行末使用反斜杠 \ 来表示下一行继续当前宏定义。
例如:
#define MAX(a, b) ((a) > (b) ? (a) : (b)) \
+ 1
这些操作符在 C 语言的预处理阶段被处理,它们使得宏定义更加灵活和强大。
1万+

被折叠的 条评论
为什么被折叠?



