Возможно ли (не) использовать специальные символы в C-источнике? - PullRequest
0 голосов
/ 02 июня 2018

В некотором смысле я хотел использовать символ µ в имени функции в проекте на Си.Это просто невозможно?Я получаю сообщения об ошибках типа

error: stray '\302' in program

. Я попытался добавить параметры:

-fexec-charset=UTF-8
-finput-charset=UTF-8

в сценарий сборки, но я не должен понимать, что они активируют.Я использую эту версию gcc:

arm-none-eabi-gcc (GNU Tools for ARM Embedded Processors 6-2017-q2-update) 6.3.1 20170620 (release) [ARM/embedded-6-branch revision 249437]

Ответы [ 3 ]

0 голосов
/ 02 июня 2018

Стандарт C требует, чтобы реализации имели следующие символы в наборе исходных символов:

A-Z a-z 0-9 ! " # % & ' ( ) * + , - . / : ; < = > ? [ \ ] ^ _ { | } ~

, а также пробел, символы для горизонтальной табуляции, вертикальной табуляции и подачи формы.Также требуется некоторый метод указания конца строки, хотя это не обязательно символ в потоке (C 2011 [N1570] 5.2.1 3).Реализации могут расширять этот набор символов, и они могут разрешать другие символы в идентификаторах, но такие расширения определяются каждой реализацией, а не стандартом.

-finput-charset=… не определяет, какой набор символов использовать для исходного символазадавать. Указывает, что представляет собой набор символов исходного ввода, но этот ввод преобразуется в исходный набор символов GCC.

Кажется, что Clang принимает µ в качестве идентификатора (протестировано на macOS и в Compiler Explorer ), в то время как GCC нет.

0 голосов
/ 02 июня 2018

Я пробовал эту программу (в кодировке UTF-8) на моем Mac под двумя разными компиляторами:

#include <stdio.h>

double π = 3.141592654;

int main()
{
    printf("π = %f\n", π);
}

Как уже сообщали другие, gcc жаловался на "заблуждение" \ 317 'в программе ".Но Clang принял это и успешно скомпилировал;когда я запускаю полученную программу, я получаю

π = 3.141593

Итог: я думаю, это определяется реализацией.

0 голосов
/ 02 июня 2018

Имя функции должно включать только буквенно-цифровые символы и символы подчеркивания в большинстве реализаций языка C.

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