gpt4 book ai didi

c++ - GNU C/C++ 宏中的标记串联

转载 作者:太空宇宙 更新时间:2023-11-04 01:04:00 25 4
gpt4 key购买 nike

我想写一个宏来输出表达式的文本及其值,例如

int a = 2;
PRINT(a + 1);

应该输出

a + 1 = 3

C/C++ Macro string concatenation展示了 token 连接的使用。然而,

#define PRINT(x) std::cout << x " = " << x << "\n"

#define PRINT(x) std::cout << (x) " = " << x << "\n"

给予

error: expected ';' before string constant

同时

#define PRINT(x) std::cout << x##" = " << x << "\n"

给予

error: pasting "1" and "" = "" does not give a valid preprocessing token

请问我怎样才能达到我的目的?谢谢!

最佳答案

在宏参数之前使用单个 # 将其转换为字符串。

还要在参数的正常使用周围加上括号,以防止运算符优先级的意外影响。

#define PRINT(x) std::cout << #x " = " << (x) << "\n"
^ ^ ^

您不想在此处(或在您链接到的问题中,如那里的答案所述)进行标记连接;这不用于组合字符串文字(这是自动完成的),而是将两个标记组合在一起以形成一个标记,例如

#define DECLARE_TWO_VARIABLES(x) int x ## 1, x ## 2;
DECLARE_TWO_VARIABLES(stuff)

扩展为

int stuff1, stuff2;

12 连接到参数 stuff 上以创建单个标记 stuff1stuff2.

关于c++ - GNU C/C++ 宏中的标记串联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28306444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com