閱讀521 返回首頁    go 阿裏雲 go 技術社區[雲棲]


gcc編譯報錯:程序中有遊離的‘\357’‘\273’‘\277’等 解決方法

原文:https://www.cnblogs.com/lidp/archive/2009/06/17/1697886.html

造成的原因主要有兩個:
1. 程序(*.c,*.h)中使用了中文的標點符號(全角),比如;,},+。
改成英文的標點半角符號就行了。
甚至有時候空格也會出現類似錯誤,刪掉該空格 重新輸入。
vim裏麵做類似替換還是很容易的。

如何看到報錯的符號?
od -c hello.c > log.txt
在log中就能看到符號了

2. 
如果替換成了英文標點還出錯的話,還報此錯誤,那麼就是文件存貯格式的問題了。
一般在windows下的文件都存成ansi格式,為了在linux下能通用,建議保存成UTF-8不帶BOM 
編碼格式,因為目前gcc和g++不支持UTF-8帶BOM編碼格式。

用g++編譯的時候碰到UTF-8 BOM錯誤怎麼辦?
$ g++ -I../../include unit_test.cpp -o unit_test
unit_test.cpp:1: 錯誤: 程序中有遊離的'\357'
unit_test.cpp:1: 錯誤: 程序中有遊離的'\273'
unit_test.cpp:1: 錯誤: 程序中有遊離的'\277'
In file included from unit_test.cpp:63:
...

或在英文係統下:
$ g++ -I../../include unit_test.cpp -o unit_test
unit_test.cpp:1: error: stray '\357' in program
unit_test.cpp:1: error: stray '\273' in program
unit_test.cpp:1: error: stray '\277' in program
In file included from unit_test.cpp:63:
...


如何判斷文件是否是使用UTF-8 BOM存儲的?

執行下麵的命令:
$ cat cpp/src/unit_test/unit_test.cpp |hd -n 10
00000000 ef bb bf 2f 2a 2a 2a 2a 2a 2a |.../******|
0000000a



最後更新:2017-04-02 06:51:59

  上一篇:go java.lang.UnsatisfiedLinkError: Can't load library from JNI code
  下一篇:go 創新源於模仿之五:做一個自己的QuickAction