Linux下Visual Studio与gcc的C++兼容性

Posted

技术标签:

【中文标题】Linux下Visual Studio与gcc的C++兼容性【英文标题】:C++ compatibility between Visual Studio and gcc under Linux 【发布时间】:2011-03-24 11:05:01 【问题描述】:

我正在尝试在 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?我该如何解决?

【问题讨论】:

【参考方案1】:

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

【讨论】:

但是我想让它同时在两个系统上编译...我可以配置VS将它保存为utf-8吗? @Grzenio:请参阅this question 或this question 了解如何设置它,this question 了解如何批量更改所有项目文件。 是否可以在项目或解决方案级别进行配置?【参考方案2】:

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

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

【讨论】:

但是我想让它同时在两个系统上编译...我可以配置VS保存为utf-8吗? 如果文件已经是 UTF-8,MSVC 将保留 UTF-8,它也可以使用它们。【参考方案3】:

可能是您的文件使用 windows 编码,带有 ^M、\r\n...等字符 您是否尝试在编译之前在源文件上运行 dos2unix?

【讨论】:

Windows 换行符非常适合 GCC。【参考方案4】:

我想我在 unicode 文件中看到了“流浪...”。

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

【讨论】:

以上是关于Linux下Visual Studio与gcc的C++兼容性的主要内容,如果未能解决你的问题,请参考以下文章

C++ 与 gcc 和 Visual Studio 不同的编译错误,“在此上下文中”

Visual Studio 2013下如何编译运行程序?

如何使用 gcc 和 Visual Studio 的“静态链接”和“动态链接”构建 C/C++ 程序?

《软件工具》手把手教你使用Visual Studio Code开发C/C++(Linux)

在Visual Studio或GCC中使用表情符号作为c ++中的标识符名称

visual studio code如何运行c