ano*_*non 8 variables unicode g++
我想在g ++中使用unicode变量名.
它似乎不起作用.
g ++不支持unicode变量名,...还是有一些unicode子集(我从中没有测试过).
谢谢!
你必须-fextended-identifiers在编译时指定标志,你还必须使用\ uXXXX或\ uXXXXXXXX作为unicode(至少在gcc中它是unicode)
g ++中的标识符(变量/类名等)不能是utf-8/utf-16或其他任何编码,它们必须是:
identifier:
nondigit
identifier nondigit
identifier digit
Run Code Online (Sandbox Code Playgroud)
一个非数字是
nondigit: one of
universalcharactername
_ a b c d e f g h i j k l m n o p q r s t u v w x y z
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Run Code Online (Sandbox Code Playgroud)
而且是一个普遍的特征
universalcharactername:
\UXXXXXXXX
\uXXXX
Run Code Online (Sandbox Code Playgroud)
因此,如果将源文件保存为UTF-8,则不能使用如下变量:
int høyde = 10;
Run Code Online (Sandbox Code Playgroud)
它必须写成:
int h\u00F8yde = 10;
Run Code Online (Sandbox Code Playgroud)
(imo会击败整个目的 - 所以只要坚持使用az)
小智 5
C++ 预处理器的一行补丁允许 UTF-8 输入。GCC 的详细信息在 GCC 中的 UTF-8 Identifiers中给出。
但是,由于预处理器是共享的,因此相同的补丁也应该适用于 g++。特别是,从 gcc-5.2 开始,所需的补丁是
diff -cNr gcc-5.2.0/libcpp/charset.c gcc-5.2.0-ejo/libcpp/charset.c
Run Code Online (Sandbox Code Playgroud)
输出:
*** gcc-5.2.0/libcpp/charset.c Mon Jan 5 04:33:28 2015
--- gcc-5.2.0-ejo/libcpp/charset.c Wed Aug 12 14:34:23 2015
***************
*** 1711,1717 ****
struct _cpp_strbuf to;
unsigned char *buffer;
! input_cset = init_iconv_desc (pfile, SOURCE_CHARSET, input_charset);
if (input_cset.func == convert_no_conversion)
{
to.text = input;
--- 1711,1717 ----
struct _cpp_strbuf to;
unsigned char *buffer;
! input_cset = init_iconv_desc (pfile, "C99", input_charset);
if (input_cset.func == convert_no_conversion)
{
to.text = input;
Run Code Online (Sandbox Code Playgroud)
请注意,要使上述补丁发挥作用,需要安装支持C99转换的最新版本iconv。键入以验证这一点。否则,您可以安装新版本的 iconv 以及 GCC,如上面的链接所述。iconv --list
将配置命令更改为
../gcc-5.2.0/configure -v --disable-multilib \
--with-libiconv-prefix=/usr/local/gcc-5.2 \
--prefix=/usr/local/gcc-5.2 \
--enable-languages="c,c++"
Run Code Online (Sandbox Code Playgroud)
如果您正在为 x86 构建并且还想包含 C++ 编译器。
| 归档时间: |
|
| 查看次数: |
5607 次 |
| 最近记录: |