我希望编写一个宏来输出表达式的文本及其值,例如
int a = 2;
PRINT(a + 1);
Run Code Online (Sandbox Code Playgroud)
应该输出
a + 1 = 3
C/C++宏字符串连接显示了令牌连接的使用.然而,
#define PRINT(x) std::cout << x " = " << x << "\n"
Run Code Online (Sandbox Code Playgroud)
要么
#define PRINT(x) std::cout << (x) " = " << x << "\n"
Run Code Online (Sandbox Code Playgroud)
给
错误:预期';' 字符串常量之前
而
#define PRINT(x) std::cout << x##" = " << x << "\n"
Run Code Online (Sandbox Code Playgroud)
给
错误:粘贴"1"和""=""不提供有效的预处理令牌
我怎么能实现我的目标呢?谢谢!
#在宏参数之前使用单个参数将其转换为字符串.
还要将括号括在参数的正常使用周围,以防止操作符优先级的惊人效果.
#define PRINT(x) std::cout << #x " = " << (x) << "\n"
^ ^ ^
Run Code Online (Sandbox Code Playgroud)
你不希望在这里(或在你链接的问题中,如其中所描述的答案)进行标记连接; 这不是用来组合字符串文字(这是自动完成的),而是将两个标记组合在一起制作一个标记,例如
#define DECLARE_TWO_VARIABLES(x) int x ## 1, x ## 2;
DECLARE_TWO_VARIABLES(stuff)
Run Code Online (Sandbox Code Playgroud)
扩展到
int stuff1, stuff2;
Run Code Online (Sandbox Code Playgroud)
连接1和2参数stuff创建单个标记stuff1和stuff2.