我使用Microsoft Visual Studio在Windows和GCC在Ubuntu Linux上开发C++跨平台应用。
在Visual Studio中,我可以在我的代码中使用Unicode符号,例如"π"和"²"。Visual Studio总是将源文件保存为带有BOM(字节顺序标记)的UTF-8格式。
例如:
// A = π.r²
double π = 3.14;
GCC只有在我先删除BOM后才能愉快地编译这些文件。如果我不删除BOM,就会出现以下错误:
wwga_hydutils.cpp:28:9: error: stray ‘\317’ in program wwga_hydutils.cpp:28:9: error: stray ‘\200’ in program
这让我想到了一个问题:
有没有办法让GCC在不删除BOM的情况下编译UTF-8文件?
我正在使用:
- Windows 7
- Visual Studio 2010
和:
- Ubuntu 11.10 (Oneiric Ocelot)
- GCC 4.6.1,2011-06-27(由apt-get install gcc提供)
正如第一位评论者指出的那样,我的问题不是BOM,而是在字符串常量之外有非ASCII字符。 GCC不喜欢符号名称中的非ASCII字符,但事实证明GCC完全兼容UTF-8带BOM。
也没有帮助。
-fextended-identifiers仅支持通用字符名称格式,如果关闭(
-fno-extended-identifiers),即使是
fun\u039B()`也会失败。 - Sahil Singh