如何在变量命名中使用日语字符?
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 文件。
我想使用的一个字符:≠
,not_equal sign。
我试图在变量命名中使用日文单词,但 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 文件。
我想使用的一个字符:≠
,not_equal sign。