C++宏定义编译不通过快速排查方法(VS编译器)

在定义比较复杂的宏时,往往因为编码的疏忽,在程序编译时,抛出各种错误,查找起来非常耗时,

比如:

比如定义一个宏

#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; } \ ;

发现尾部多个转义字符,还有个小空格,明显就是转义字符后面多个空格引起的

问题锁定了!

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值