是否有可能让GCC用BOM源文件编译UTF-8?

Boi*_*nst 12 gcc byte-order-mark g++ utf-8

我使用Windows上的Microsoft Visual Studio和uBuntu Linux上的GCC开发C++交叉平台.

在Visual Studio中,我可以在我的代码中使用像" π "和" ² " 这样的unicode符号.Visual Studio始终将源文件保存为带有BOM(字节顺序标记)的UTF-8.

例如:

// A = ?.r²
double ? = 3.14;
Run Code Online (Sandbox Code Playgroud)

只有在我首先删除BOM时,GCC才会愉快地编译这些文件.如果我不删除BOM,我会收到以下错误:

wwga_hydutils.cpp:28:9:错误:在程序中迷路'\ 317'

wwga_hydutils.cpp:28:9:错误:在程序中迷失'\ 200'

这让我想到了这个问题:

有没有办法让GCC编译UTF-8文件而不先删除BOM?


我正在使用:

  • Windows 7的
  • Visual Studio 2010

和:

  • uBuntu Oneiric 11.10
  • GCC 4.6.1(由apt-get install gcc提供)

编辑:

正如第一个评论者指出的那样,我的问题不是 BOM,而是在字符串常量之外使用非ascii字符.GCC不喜欢符号名称中的非ascii字符,但事实证明GCC与带有BOM的UTF-8完全兼容.

Adr*_*Cox 4

根据GCC Wiki,尚不支持此功能。您可以使用-fextended-identifiers 并预处理代码以将标识符转换为 UCN。从链接页面:

perl -pe 'BEGIN { binmode STDIN, ":utf8"; } s/(.)/ord($1) < 128 ? $1 : sprintf("\\U%08x", ord($1))/ge;' 
Run Code Online (Sandbox Code Playgroud)

另请参阅C++11 中的g++ unicode 变量名称和Unicode 标识符和源代码?