奇葩编译问题
2021-04-08 本文已影响0人
叶迎宪
一个头文件,是从某个开源项目
https://gitee.com/Gaaagaa/inifile/blob/master/xini_file.h
网页复制黏贴到vc中保存的。但是编译始终始终报错
d:\program files (x86)\microsoft visual studio 14.0\vc\include\sal.h(2361): error C2144: 语法错误:“int”的前面应有“;”
而编译报错的一行是
extern "C" {
显得有些莫名其妙。但是使用git下载下来的文件,是可以正常编译的。尝试使用UltraEdit的十六进制查看功能比较两个文件的差异,居然没有发现有任何不同。但是使用tortoisegit自带的diff比较,比较出文件第一行有差异。右键查看文件的大小,确实两者相差了3个字节。UltraEdit的十六进制编辑功能已经不可相信了,只能自己用c程序读取文件二进制内容,发现编译出错的文件,头6个字节为 ef bb bf ef bb bf,显然UTF8的BOM头被写了两次。把文件改为utf-8无bom,保存一次减少一组bom后,就可以正常编译了。
结论
一、VS2015的编辑器有bug,一定条件下会写了两次BOM头。因此最好使用无BOM的UTF-8格式
二、UltraEdit在遇到文件有两个BOM的时候,也有bug,十六进制编辑居然漏了一组BOM