美文网首页
奇葩编译问题

奇葩编译问题

作者: 叶迎宪 | 来源:发表于2021-04-08 22:40 被阅读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

    相关文章

      网友评论

          本文标题:奇葩编译问题

          本文链接:https://www.haomeiwen.com/subject/bnlbkltx.html