我想对我的疯狂宏进行一些调试,但由于宏生成代码而不是字符串,所以无法做到这一点。我必须更改宏以发出字符串,以便我的程序打印出原本会产生的代码。
C ++ 11中的新功能是R"delim("Raw Strings")delim"
,我希望有一些方法可以在其中一个内部插入代码宏,将代码转换为字符串文字。
答案 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;这些可以在预处理输出的顶部添加数百或数千行代码。