我正在尝试在变量命名中使用日语单词,但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.年齢);
}
答案 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文件。
我想使用一个字符:≠
,not_equal sign。
答案 1 :(得分:2)
这是不可能的,至少没有可移植的方法(尽管有些编译器可能允许,而其他编译器则不允许)。根据{{3}}:
标识符只能包含字母数字字符(a-z,A-Z,0-9)和下划线(_)。
但是使用宏可能会起作用。要尝试此操作,请在您第一次使用“忍び”之前添加以下行:
#define 忍び Shinobi
但是,我不推荐它。它也不是可移植的,某些编译器可能允许某些符号,而另一些则不允许。