g ++ unicode变量名

时间:2010-04-21 09:43:29

标签: unicode variables g++

我正在尝试在g ++中使用unicode变量名。

它似乎不起作用。

g ++不支持unicode变量名,...还是有一些unicode子集(我从中没有测试过)。

谢谢!

2 个答案:

答案 0 :(得分:9)

编译时必须指定-fextended-identifiers标志,还必须使用\ uXXXX或\ uXXXXXXXX作为unicode(至少在gcc中是unicode)

g ++中的标识符(变量/类名等)不能是utf-8 / utf-16或其他任何编码, 他们必须是:

identifier:
  nondigit
  identifier nondigit
  identifier digit

非数字是

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

和universalcharactername是

universalcharactername:
  \UXXXXXXXX
  \uXXXX

因此,如果您将源文件保存为UTF-8,则不能使用例如的变量:

int høyde = 10;

必须写成:

int h\u00F8yde = 10;

(imo会击败整个目的 - 所以只需坚持使用a-z)

答案 1 :(得分:4)

cpp预处理器的单行补丁允许UTF-8输入。 gcc的详细信息在

中给出

https://www.raspberrypi.org/forums/viewtopic.php?p=802657

但是,由于预处理器是共享的,因此同样的补丁也适用于g ++。特别是,需要补丁,如gcc-5.2那样

diff -cNr gcc-5.2.0/libcpp/charset.c gcc-5.2.0-ejo/libcpp/charset.c
*** 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;

请注意,要使上述补丁工作,需要安装支持C99转换的最新版iconv。输入iconv --list来验证这一点,否则,你可以安装一个新版本的iconv和gcc,如上面的链接所述。将configure命令更改为

$ ../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++"

如果您正在为x86构建并希望包含c ++编译器。