在原始字符串中扩展宏

时间:2013-12-30 23:22:38

标签: c++ string c++11 macros

我想对我的疯狂宏进行一些调试,但由于宏生成代码而不是字符串,所以无法做到这一点。我必须更改宏以发出字符串,以便我的程序打印出原本会产生的代码。

C ++ 11中的新功能是R"delim("Raw Strings")delim",我希望有一些方法可以在其中一个内部插入代码宏,将代码转换为字符串文字。

2 个答案:

答案 0 :(得分:1)

原始字符串文字以与普通字符串文字相同的方式连接。

#define MYMACRO "hello"
std::string blah = R"(first part -)" MYMACRO R"(- second part)";
std::cout << blah;

将输出first part -hello- second part

答案 1 :(得分:1)

如果你想调试疯狂的宏,你可能会直接检查预处理的输出。任何C / C ++编译器都有一个选项。在海湾合作委员会中-E;对于MSVC,我不记得它究竟在哪里,但其中一个属性部分有“保持预处理输出”。执行此操作时,请将#include保持在最低限度,尤其是标准库#includes;这些可以在预处理输出的顶部添加数百或数千行代码。