C++运算符##不适用于字符串和宏[重复]

xurqigkl  于 2023-01-28  发布在  其他
关注(0)|答案(1)|浏览(151)
    • 此问题在此处已有答案**:

Creating C macro with ## and LINE (token concatenation with positioning macro)(3个答案)
3天前关闭。

不能处理宏中的字符串。我的编译器不能提取宏的值或##之后的其他内容

#define ProfilerScope(name) Timer timer ## __LINE__;
它只返回Timer timer__LINE__
我试着做一个字符串宏来使这个工作,但没有什么,他们只是返回我相同的

#define STRINGIZE(x) STRINGIZE_SIMPLE(x)
#define STRINGIZE_SIMPLE(x) #x

#define ProfilerScope(name) Timer timer ## STRINGIZE(__LINE__);

返回Timer timerSTRINGIZE(__LINE__)
我希望它返回使用宏的代码行

gojuced7

gojuced71#

我希望它返回使用宏的代码行
我认为你想扩展__LINE__,然后用一个单词连接它。你必须在一个宏中扩展它。下面的代码:

#define CONCAT(a, b)  CONCAT2(a, b)
#define CONCAT2(a, b)  a##b
#define ProfilerScope(name) Timer CONCAT(timer, __LINE__);
ProfilerScope()

输出Timer timer4;

相关问题