Wandering between the native & managed world

CLR/.NET 4.0开发中~~

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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

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

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

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

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

image

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

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

posted on 2008-11-29 22:27  张羿  阅读(416)  评论(0编辑  收藏  举报