IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    编译错误:error: stray ‘\\357’ in program

    reille发表于 2016-03-09 16:01:48
    love 0

    用VS编写代码时,从word文档中拷贝了一些内容作为注释。编完代码,转到linux上编译时,结果出现了下面一段有点让人丈二和尚摸不到头脑的编译错误:

    • xxUnit.cpp:1: error: stray ‘\357’ in program
    • xxUnit.cpp:1: error: stray ‘\273’ in program
    • xxUnit.cpp:1: error: stray ‘\277’ in program

    具体如下图所示:

    Cache_20c6195f8a3b0493.

    图1

    这可以排除是语法错误引起的。因为语法错误,编译器会提示哪一行出错了。

    查明真相

    实际上,这个编译错误是由于文件格式引起的。我估计应该是从word拷贝内容到源文件作为注释时引起的。

    使用NotePad++打开源文件,发现是UTF-8格式,如下图所示。

    Cache_-581d355135b23fcd.

    图2

    UTF-8 编码是一种兼容 ASCII 编码的变长编码方案。

    但要注意的是,大多数 Windows 文件编辑器(包括记事本)在将文件保存为 Unicode 编码时,会在文件开始的地方插入三个隐藏的字符(0xEF 0xBB 0xBF),即BOM字符(Byte Order Mark,字节顺序标记),用于标识文件是采用哪种格式的编码。

    Cache_3bd3d1610c4a53d2.

    图3

    Windows 使用三个隐藏的BOM字符来标记文本文件的编码方式,用于让记事本等编辑器识别这个文件是否以UTF-8编码。对于一般的文件,这样并不会产生什么麻烦。但关键的问题是,linux中没有这个规矩,它不认识这三个BOM字符。

    UTF-8编码文件的BOM字符:0xEF 0xBB 0xBF,对应8进制数,正好是357、273、277。也就是说,上述编译错误中的字符是以 8 进制表示的。这个编译错误,提示的确实有点隐晦。

    解决方法

    解决此编译错误之方法为:把UTF-8编码文件改为ASCII 编码的文件。

    用NotePad++打开源文件,如图2所示,在格式菜单中,选择“转为ANSI编码格式”,然后保存即可。

    您可能也喜欢:

    stm32移植ecos #34,ecos sd driver,SD卡驱动(4)

    linux共享内存应用范例

    stm32移植ecos #37,goAhead移植到eCos,基于LWIP协议栈(下)

    曾经那么难过的伤痛都挺过来,又何况这次!

    VS助手—Visual Assist X 10.8_2043.0破解版安装
    无觅
    » 本文地址: http://velep.com/archives/1220.html
    » 文章出处: reille博客—http://velep.com , 如果没有特别声明,文章均为reille博客原创作品
    » 郑重声明: 原创作品未经允许不得转载,如需转载请联系reille#qq.com(#换成@)
    分享到:
    推荐阅读相关文章:
    • linux backtrace()详细使用说明,分析Segmentation fault
    • linux下统计代码执行时间
    • likely(x)与unlikely(x)函数,即__builtin_expect的使用
    • 干掉你程序中的僵尸代码
    • Linux平台下如何检测、调试C/C++程序内存泄漏?
    • linux共享内存应用范例
    • LINUX socket can的bit-timing not yet defined错误
    • Linux CAN编程详解


沪ICP备19023445号-2号
友情链接