Когда мне нужно использовать альтернативные макросы для побитовых и логических операторов в заголовочном файле iso646.h? - PullRequest
2 голосов
/ 02 февраля 2020

Я знаю, что в заголовке iso646.h определены следующие одиннадцать констант marco для предоставления альтернативных описаний побитовых и логических операторов:

and - это макрос для &&.

and_eq - это макрос для &=.

bitand - это макрос для &.

bitor - это макрос для |.

compl - это макрос для ~.

not - это макрос для !.

not_eq - это макрос для !=.

or - это макрос для || .

or_eq - макрос для |=

xor - макрос для ^.

xor_eq - макрос для ^= .


Но когда мне нужно использовать эти альтернативные макросы?

  • При каких обстоятельствах мне нужно использовать альтернативные макросы для побитовых и логических операторов внутри файла заголовка iso646.h?

1 Ответ

4 голосов
/ 02 февраля 2020

Вы должны использовать его, если ваша кодировка не реализует полный репертуар ASCII:

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

Решение представляет собой согласованный на международном уровне репертуар, в рамках которого можно определить международное представительство C. ISO определил такой стандарт: ISO 646 описывает инвариантное подмножество ASCII.

Символы в репертуаре ASCII, используемые C и отсутствующие в репертуаре ISO 646:

    # [ ] { } \ | ~ ^

Взято из ANSI C Обоснование, [2.2.1.1 Последовательности триграфа]

Как указывалось @ chqrl ie, это был важный вопрос, который необходимо учитывать в 1980-х годах, но гораздо менее актуальный сегодня.

Это также причина, по которой триграфы были введены (объяснено далее в том же разделе). Таким образом, когда используется кодировка не ASCII, макросы заменяются их версиями триграфа в iso646.h.

...