前几天写代码的时候遇到了一个十分诡异的编译错误。对于下面的代码,你能够发现问题在那里吗?
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++的预处理器而言,很容易就可以过滤掉\后面多余的空格,而没有必要由此引发语法错误。就算是要引发语法错误,也必须得有一个合理清晰的错误信息,不然只会浪费用户的时间。