编程工作中经常用到宏,自然也少不了使用续行符(continuation character),也知道续行符后面不能有其它的字符,包括空白字符。一直以来谨守此规则,未曾遇到什么麻烦,顶多是漏一个两个续行符,一下子就可以查到问题并补上了事。但是今天编写一段代码:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#define JS_DUMP_SCRIPT(s) /
do { /
U8 *p = NULL; /
U8 *pUnicode = s; /
/
U32 len = 0; /
/
while (*pUnicode + *(pUnicode+1) != 0) /
{ /
pUnicode += 2; /
len++; /
} /
/
p = MSF_MEM_ALLOC(0, len + 1); /
memset(p, 0, len + 1); /
/
while (*pUnicode + *(pUnicode+1) != 0) /
{ /
pUnicode += 2; /
*p = *pUnicode; /
} /
/
printf("[JSE]JS source code=%s/r/n", p); /
/
MSF_MEM_FREE(0, p); /
} while (0)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
一编译就报告错误:error C2143: syntax error : missing ')' before 'constant'.................
仔细看代码,怎么也发现不了问题!于是还是用上屡试不爽的土办法,把代码备份一下,然后分段去除——编译——再去除。终于发现问题就在这行上:
printf("[JSE]JS source code=%s/r/n", p); /
再端详一番,感觉没啥问题啊?郁闷中。。。。。。。。。。终于发现了“/”之后竟然有一个空格!去掉之,编译——通过。
问题解决了,但是我再度陷入郁闷之中,也陷入了思考。以前只知道续行符之后不能再有字符,但是还真是没有认真想过why?经过一番思考和资料查找阅读,终于在MSDN上找到了答案:
[待续..................]