#运算符用于将宏参数转换为字符串字面量。这通常用于调试或日志记录,将参数的值以字符串形式输出。
#include <iostream>
#define LOG(para) printf("%d,%s\n",para,#para)
int main() {
LOG(10);
return 0;
}
#include <iostream>
// #define LOG(para) printf("%d,%s\n",para,#para)
#define str(x) #x
int main() {
char* s=str(10);
std::cout<<s;
return 0;
}
##
运算符用于将两个标记(tokens)拼接成一个单独的标记。这在需要动态生成标识符时非常有用。
#define MAKE_ID(a, b) a##b
int main() {
int value123 = 42;
int id = MAKE_ID(value, 123);
return 0;
}
#__VA_ARGS__
是 #
和 __VA_ARGS__
的组合,用于将可变参数列表转换为字符串。这在定义可变参数宏时非常有用,特别是在需要将参数列表作为字符串输出时。
#define LOG(...) printf("Message: " #__VA_ARGS__)
int main() {
LOG(Hello, world!);
return 0;
}
##__VA_ARGS__
##__VA_ARGS__
是 ##
和 __VA_ARGS__
的组合,用于处理可变参数为空的情况。当没有参数传递给宏时,##
会移除多余的逗号,避免语法错误。
#include <iostream>
#define LOG(level, ...) printf(level, ##__VA_ARGS__)
int main() {
LOG("Hello, world!","aaa");
LOG("a");
return 0;
}
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有