如何在变量命名中使用日语字符?

时间:2018-11-09 10:58:54

标签: c cjk

我正在尝试在变量命名中使用日语单词,但C语言似乎无法以这种方式工作。有没有什么办法解决这一问题?

请参阅下面的代码。

#include <stdio.h>

struct 忍び/* Shinobi */
{
    char 名前/* Namae */[50];
    char 血液型/* Ketsuekigata */[3];
    char 性別/* Seibetsu */[10];
    char 星占い/* Hoshi uranai*/[10];
    int 年齢/* Nenrei */;
};

int main(void)
{
    struct 忍び Uchiha_Itachi;
    Uchiha_Itachi.年齢 = 21;
    printf("the age of itachi > %d", Uchiha_Itachi.年齢);
}

2 个答案:

答案 0 :(得分:4)

  

C语言似乎无法以这种方式工作。有什么办法可以解决这个问题?

对此类字符的支持已定义为实现。许多编译器将不支持此功能。

  

标识符可能包含非数字(az,AZ,_),数字(0-9),通用-字符名称其他实现定义的字符。 C17 6.4.2 1


替代

自C99起,代码可以通过\Unnnnnnnn\unnnn使用通用字符名称-可能性不大。

一种应用程序是将(在一个编译器上工作的)源代码struct 忍び转换为其他编译器的struct \u5fcd\u3073

https://www.branah.com/unicode-converter
忍び-> \ u5fcd \ u3073

#include <stdio.h>

struct \u5fcd\u3073/* Shinobi */ {
    char \u540d\u524d /* Namae */[50];
    char \u8840\u6db2\u578b /* Ketsuekigata */[3];
    char \u6027\u5225/* Seibetsu */[10];
    char \u661f\u5360\u3044/* Hoshi uranai*/[10];
    int \u5e74\u9f62/* Nenrei */;
};

int main(void) {
    struct \u5fcd\u3073 Uchiha_Itachi;
    Uchiha_Itachi.\u5e74\u9f62 = 21;
    printf("the age of itachi > %d", Uchiha_Itachi.\u5e74\u9f62);
}

注意:使用下面的定义,也未指定起作用。对此实现的支持已定义。

// not certain to work
#define 忍び \u5fcd\u3073 

如果迫切需要“是否可以解决此问题?”,请将您的源代码编写为.wheldrake文件,然后将其转换为标准.c文件。


Soapbox

我想使用一个字符:not_equal sign

答案 1 :(得分:2)

这是不可能的,至少没有可移植的方法(尽管有些编译器可能允许,而其他编译器则不允许)。根据{{​​3}}:

  

标识符只能包含字母数字字符(a-z,A-Z,0-9)和下划线(_)。

但是使用宏可能会起作用。要尝试此操作,请在您第一次使用“忍び”之前添加以下行:

#define 忍び Shinobi

但是,我不推荐它。它也不是可移植的,某些编译器可能允许某些符号,而另一些则不允许。