做企业网站一般多少钱,九江做网站大概多少钱,网站建设套餐是什么意思,浙江电商网站建设销售在C/C语言中#xff0c;在对源文件做预处理的时候#xff0c;有两条基本原则#xff1a;1、凡是以//开头的为单行注释2、凡是以\结尾的代表此行尚未结束于是预处理器在处理的时候会先按第二条规则#xff0c;看每行的末尾的那个字符是不是”\”,是的话#xff0c;就下一行…在C/C语言中在对源文件做预处理的时候有两条基本原则1、凡是以//开头的为单行注释2、凡是以\结尾的代表此行尚未结束于是预处理器在处理的时候会先按第二条规则看每行的末尾的那个字符是不是”\”,是的话就下一行接到本行。然后把所有以//开头的注释和/* */的块注释去掉。但是存在一个问题对于big5中的汉字而言其第一个字节的编码范围是0xA1 - 0xFE第二个字节是0×40 -0xFE。而’\的ASCII码是0×5c.这就意味这凡是以big5编码的文件如果gcc没有正确的认为它源文件的编码是big5,那么就可能出现因为单行注释末尾是汉字而把下行的代码吃掉的情况。这样是很危险的但是gcc会给出一个警告”warning: multi-linecomment 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.cpptestgbk.cpp:5: error: expected unqualified-id before “return”testgbk.cpp:6: error: expected declaration before ‘}’ tokeng 3.3下显示testgbk.cpp:3: error: parse error before return’原因很简单我把“好”字的GBK编码的后半个字节改成了’\的编码从而得到了”篭”字。gcc发现’\后面接着的就是’\n’,故而把下一行”int main(int argc,char* argv[]){”也当做注释一并删除掉了。按gcc 3.4的man页gcc会根据shell的locale设置来猜测源文件的编码格式否则它会把其当作utf-8来处理。但是据我在Freebsd和solaris系统中观察gcc 3.4并没有根据环境变量来猜测源文件的编码。一个不错的解决方案是强行给gcc添加-finput-charsetbig5这样的参数来解决此问题。类似的还有-fexec-charset-fwide-exec-charset用于指定执行环境的编码。但是不幸的是gcc内部的处理都是基于utf-8的,且其转换工作一般是靠系统的iconv转码库来完成的。 所以系统库必须提供 GBK UTF-8 、BIG5 UTF-8 的编码.例如我在Freebsd 6.2下使用这样的参数编译一个测试文件$ gcc -c testbig5.cpp -finput-charsetbig5 -fexec-charsetbig5 -fwide-exec-charsetbig5所得到的输出是cc1plus: no iconv implementation, cannot convert from big5 to UTF-8cc1plus: no iconv implementation, cannot convert from UTF-8 to big5cc1plus: no iconv implementation, cannot convert from UTF-8 to big5所以这种方案的缺点是1、缺乏通用性缺乏可移植性。Freebsd的内核中的转码是靠查一个16位的表所以无法处理utf-8中的汉字(因为汉字是3字节),而直到最新的要到08才能发布的Freebsd 7.x,此问题也依然没有被解决。而Solaris最初的代码是基于BSD的。它所提供的iconv转码功能也非常差。2、添加了很多额外的转码操作。目前utf-8(unicode)尚未完全容纳GBK、big5的全部字符。很多字符是转换不过去的。另一个折衷的方案是保证每行注释都以句号或者空格结尾。缺点是需要检查并改动很多文件。且特殊汉字依然有可能出现在源文件的常量字符串中。问题依旧。例如const char* s”你篭”;写成这样的怪样子就可以编译了const char* s”你篭”;较好的解决方案是源文件都以UTF-8格式编码。这样可以最大限度的减少转码次数。最彻底的解决方案是引入gettext不在源文件中存储汉字的常量字符串。改用单独的文件存储。目前包括很多php论坛、blog都已采用这种方案。但是这样做本来是为了支持英、法、汉多语言解决翻译的问题。如果单为了简、繁的问题就这么做代价太大。