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

How can I use Japanese language characters in variable naming?

我试图在变量命名中使用日文单词,但 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.年齢);
}

这是不可能的,至少没有可移植的方式(一些编译器可能仍然允许它,而另一些则不允许)。根据this:

An Identifier can only have alphanumeric characters(a-z , A-Z , 0-9) and underscore(_).

不过,它可能会使用宏。要尝试这样做,请在首次使用“忍び”之前添加此行:

#define 忍び Shinobi

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

C language doesn't appear to be work this way. Is there any way to fix this?

对此类字符的支持由实现定义。许多编译器不支持这个,少数可能。

An identifier may contain non-digits (a-z, A-Z, _), digits (0-9), universal-character-name or other implementation-defined characters. C17 6.4.2 1


备选

从 C99 开始,代码可以通过 \Unnnnnnnn\unnnn 使用 universal-character-name - 不太可能。

一个应用程序是将源代码 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 

如果强烈需要 "any way to fix this?",请将您的源代码编写为 .wheldrake 文件并将其转换为标准的 .c 文件。


Soapbox

我想使用的一个字符:not_equal sign