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?
我正在使用:
和:
编辑:
正如第一个评论者指出的那样,我的问题不是 BOM,而是在字符串常量之外使用非ascii字符.GCC不喜欢符号名称中的非ascii字符,但事实证明GCC与带有BOM的UTF-8完全兼容.
根据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 标识符和源代码?
归档时间: |
|
查看次数: |
9070 次 |
最近记录: |