Разрешены ли нелатинские символы в директиве #error? - PullRequest
0 голосов
/ 04 марта 2019

Допускается ли использование нелатинских символов в директиве #error в стандарте C ++?

Например, я хотел бы написать сообщение об ошибке на русском языке:

#error Сообщение об ошибке
int main() { }

1 Ответ

0 голосов
/ 04 марта 2019

Независимо от того, можно ли вводить символы, не входящие в ASCII, в директиву #error в зависимости от локали в соответствии с C2011 5.2.1p1 .Токены в строке после #error содержат символы, которые не входят в исходный набор символов basic ;действительно ли они допустимы как часть расширенного исходного набора символов, зависит от локали.Согласно приложению J.4 поведение, специфичное для локали, должно быть задокументировано, точно так же, как поведение, определяемое реализацией.

Разница между поведением, зависящим от локали и определяемым реализацией, заключается в том, чтобудет несколько локалей, каждая со своим набором расширенных исходных символов.Возможно, только некоторые из этих расширенных исходных наборов символов включают кириллицу.Эти аспекты стандарта C были в последний раз пересмотрены в 1999 году, до того, как Unicode захватил мир, поэтому они беспокоятся о сценариях, таких как передача исходного файла, закодированного в ISO 8859-5, компилятору, который ожидает, что расширенные исходные символы будут соответствовать EUC-JP.

Независимо от того, как вы на самом деле кодируете свои исходные файлы и соответствует ли это тому, что ожидает компилятор, то, что вы пытаетесь сделать, с большей вероятностью сработает, если вы будете использовать строковый литерал в качестве аргумента #error:

#error "Сообщение об ошибке"

Это связано с тем, что некоторые компиляторы допускают более широкое разнообразие символов в строковых литералах, чем в идентификаторах.

...