Visual Studio和Linux下的gcc之间的C++兼容性问题

3

我正在尝试在Linux下使用QtCreator构建一个使用VS 2008编写的项目,但出现了大量错误:

/home/ga/dev/CppGroup/MonteCarlo/main.cpp:1: error: stray ‘\377’ in program
/home/ga/dev/CppGroup/MonteCarlo/main.cpp:1: error: stray ‘\376’ in program
/home/ga/dev/CppGroup/MonteCarlo/main.cpp:1: error: stray ‘#’ in program
/home/ga/dev/CppGroup/MonteCarlo/main.cpp:1: warning: null character(s) ignored

这是否意味着编译器无法正确处理 Unicode?我该如何解决?

等等。

4个回答

6

看起来这是一个小端UTF-16的UTF-16 BOM。您需要确保将文件保存为UTF-8,或通过iconv -f UTF-16LE -t UTF8 myfile手动转换。


但我想让它同时在两个系统上编译... 我可以配置VS将其保存为utf-8吗? - Grzenio
@Grzenio:请参考这个问题或者这个问题来设置编码,以及这个问题来批量更改所有项目文件。 - DarkDust
能否在项目或解决方案级别上进行配置? - Grzenio

1

确保文件以UTF-8编码。使用允许您选择文件编码的文本编辑器(例如gedit或notepad ++)打开它并进行转换。我之前遇到过类似的问题,但UTF-8文件可以正常工作(其他编码如UTF-16不行)。

编辑:不要将资源脚本(如果有)转换为UTF-8。资源编译器将无法读取它(至少在使用MSVC 2008时是这样)。


但我想让它同时在两个系统上编译... 我可以配置VS将其保存为utf-8吗? - Grzenio
如果文件已经是UTF-8编码,MSVC将会保持UTF-8编码,并且也能够使用它们。 - Mario

0

可能是您的文件使用Windows编码,包含像^M、\r\n这样的字符... 在编译之前,您尝试过在源文件上运行dos2unix吗?


3
Windows的换行符对于GCC来说是完全可以接受的。 - Mario

0

我想在带有Unicode的文件中看到了“stray ...”。

您可以配置编辑器或控制台(或两者)的编码设置来解决它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接