在C/C++语言中,
在对源文件做预处理的时候,有两条基本原则:
1、凡是以//开头的为单行注释
2、凡是以\结尾的代表此行尚未结束
于是预处理器在处理的时候会先按第二条规则,看每行的末尾的那个字符是不是”\”,是的
话,就下一行接到本行。
然后把所有以//开头的注释和/* */的块注释去掉。
但是存在一个问题,
对于big5中的汉字而言,其第一个字节的编码范围是0xA1 - 0xFE,第二个字节是0×40 -
0xFE。而’\'的ASCII码是0×5c.这就意味这,凡是以big5编码的文件,如果gcc没有正确的
认为它源文件的编码是big5,那么就可能出现因为单行注释末尾是汉字,而把下行的代码
吃掉的情况。这样是很危险的,但是gcc会给出一个警告:”warning: multi-line
comment In file”
这样的问题在gbk中同样存在。
将下面的代码
—————————————————————————–
//你篭
int main(int argc,char* argv[]){
return 0;
}
—————————————————————————–
以gbk的方式保存,并采用gcc 3.4编译。
无论是solaris 8还是freebsd 6.2,无论shell的locale的设置是zh_CN.GBK还是
zh_CN.UTF-8,所得到的错误都是相同的
$ gcc -c testgbk.cpp
tes