诡异的C++ #define编译错误

it2022-05-05  111

前几天写代码的时候遇到了一个十分诡异的编译错误。对于下面的代码,你能够发现问题在那里吗?

1: #define test(a, b, c) \ 2: a; \ 3: if (b) \ 4: c

编译器给出了下面这个错误信息:

testdefine.cpp(8) : error C2059: syntax error : 'if'

意思是if语法错误。显然这个不是真正原因。实际错误的原因其实很简单,在if的上一行的\那里多了一个空格,现在我把整个代码选择上,就比较容易看得出来问题了:

去掉多余的空格,再次编译,通过。

其实对于C/C++的预处理器而言,很容易就可以过滤掉\后面多余的空格,而没有必要由此引发语法错误。就算是要引发语法错误,也必须得有一个合理清晰的错误信息,不然只会浪费用户的时间。

转载于:https://www.cnblogs.com/atfield/archive/2008/11/29/1344020.html


最新回复(0)