Не-ASCII символы в C - PullRequest
       38

Не-ASCII символы в C

5 голосов
/ 19 декабря 2011

Я просматривал исходный код времени выполнения Google Go (на https://go.googlecode.com/hg/src/pkg/runtime/), и кажется, что они используют специальный символ для имен своих функций, ·.(Посмотрите, например, на https://go.googlecode.com/hg/src/pkg/runtime/cgocall.c).Это принято во всех основных компиляторах?Это не ANSI C, не так ли?Или это просто какое-то макро-волшебство?

Спасибо!

Ответы [ 4 ]

5 голосов
/ 19 декабря 2011

C90 не допускает использования дополнительных символов в идентификаторе (по сравнению с базовыми наборами символов), C99 делает (оба с универсальным синтаксисом символов - \ uXXXX и \ UXXXXXXXX - и набор других символов, определяемый реализацией).

6.4.2.1 / 1 в C99:

identifier:
    identifier-nondigit
    identifier identifier-nondigit
    identifier digit
identifier-nondigit:
    nondigit
    universal-character-name
    other implementation-defined characters
nondigit: one of
    _ a b c d e f g h i j k l m
    n o p q r s t u v w x y z
    A B C D E F G H I J K L M
    N O P Q R S T U V W X Y Z
digit: one of
    0 1 2 3 4 5 6 7 8 9

Я не знаю, насколько хорошо это поддерживается реализациями C, я знаю, что компилятор Plan9 C может обрабатывать другие символы до того, как оно было стандартизировано.

2 голосов
/ 19 декабря 2011

Вы имеете в виду точку? Это код символа 183 из ISO 8859-1 (ISO Latin-1) - это расширенный код ASCII, соответствующий (по-видимому) грузинской запятой, или «средняя точка». На самом деле это юридический характер.

1 голос
/ 19 декабря 2011

Использование этой средней точки обсуждается здесь:

http://code.google.com/p/go/issues/detail?id=793

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

1 голос
/ 19 декабря 2011

Стандарт C99 «разрешает» (для достаточно малых значений «разрешить») «странные символы»

5.1.1.2 Этапы перевода

1 Приоритет среди синтаксических правил перевода определяется следующим фазы.

  1. Отображены многобайтовые символы физического исходного файла, в определенной реализации , к исходному набору символов (ввод символов новой строки для индикаторы конца строки) при необходимости. Триграф последовательности заменяются соответствующие односимвольные внутренние представления.
...