Как я могу использовать символы японского языка в именовании переменных? - PullRequest
0 голосов
/ 09 ноября 2018

Я пытаюсь использовать японские слова в именовании переменных, но язык 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 голосов
/ 09 ноября 2018

Язык C, похоже, не работает таким образом. Есть ли способ это исправить?

Поддержка таких символов определяется реализацией. Многие компиляторы не будут поддерживать это, некоторые могут.

Идентификатор может содержать нецифров (аз, 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 .

0 голосов
/ 09 ноября 2018

Это невозможно, по крайней мере, нет переносимого способа (некоторые компиляторы могут разрешить это, а другие нет). Согласно это :

Идентификатор может содержать только буквенно-цифровые символы (a-z, A-Z, 0-9) и подчеркивание (_).

Однако это может работать с использованием макросов. Чтобы попробовать это, добавьте эту строку перед первым использованием «忍 び»:

#define 忍び Shinobi

Однако я бы не рекомендовал это. Он также не переносим, ​​и некоторые компиляторы могут разрешать определенные символы, а другие - нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...