sha*_*oth 7 c++ macros c-preprocessor
使用C/C++宏,很容易自动生成长结构.例如,如果我想要一组大量的方法不会抛出异常(对于暴露于COM的方法必须这样做),我可以这样做:
#define BEGIN_COM_METHOD\
try{
#define END_COM_METHOD\
return S_OK;\
} catch( exception& ) {\
// set IErrorInfo here\
return E_FAIL;\
}
Run Code Online (Sandbox Code Playgroud)
为了使这些宏可管理,可以使用"\"字符使宏定义多行并且更具可读性.
问题是有时带有这种结构的代码将无法编译 - 某些东西不会按预期扩展,并且编译器将出现无效代码.编译器通常具有"生成预处理文件"选项,以向开发人员显示预处理结果.但是在预处理文件中,宏被扩展为一行,结果几乎不可读.
是否可以使预处理器保持宏定义中存在的换行符?
你不能这样做.替换文本一直到它所在的行的末尾#define,因此它不会有换行符.如果您的编译问题很少发生,那么您可以indent在编译之前运行预处理文件或其他类似的文件,这样可以帮助您获得更易读的代码.