在定义比较复杂的宏时,往往因为编码的疏忽,在程序编译时,抛出各种错误,查找起来非常耗时,
比如:
比如定义一个宏
#define PRINT_OUTPUT() \
HRESULT hr = TestResult(); \
if(0 != hr) \
{ \
cout << "error" << endl; \
} \
编译会报错:
正在编译...
stdafx.cpp
正在编译...
PtrTest.cpp
PtrTestDlg.cpp
d:\ptrtest\ptrtest\ptrtestdlg.cpp(185) : error C2017: 非法的转义序列
d:\ptrtest\ptrtest\ptrtestdlg.cpp(194) : error C2017: 非法的转义序列
d:\ptrtest\ptrtest\ptrtestdlg.cpp(201) : error C2017: 非法的转义序列
通过如下方法可以快速的锁定问题
1. 在VS2008 中选择【项目】->【属性】->【配置属性】->【C/C++】->【预处理器】->【生成预处理文件】,选择带行号(\P)或者不带行号( /EP /P) ,带行号为例,
2 然后点击【确定】按钮,重新编译程序,这样就会在程序文件下生成(*.i)文件,该文件内宏都被展开了,然后查找TestResult函数名称,查看展开结果
HRESULT hr = TestResult(); if(0 != hr) { cout << "error" << endl; } \ ;
发现尾部多个转义字符,还有个小空格,明显就是转义字符后面多个空格引起的
问题锁定了!