int main(void) { #if 0 something" #endif return 0; }
上面一个简单的程序生成一个警告:缺少终止“gcc中的字符.这看起来很奇怪,因为这意味着编译器允许#if 0和endif之间的代码块在这里有无效的语句,但不是双引号”对.使用#ifdef和#ifndef也是如此.
真实的评论在这里很好:
int main(void) { /* something" */ return 0; }
为什么?并且单引号’表现相似,是否还有其他特殊处理的令牌?
解决方法
见
comp.Lang.c FAQ,11.19:
Under ANSI C,the text inside a “turned off” #if,#ifdef,or #ifndef must still consist of “valid preprocessing tokens.” This means that the characters ” and ‘ must each be paired just as in real C code,and the pairs mustn’t cross line boundaries.