Почему синтаксис ключевого слова 'bool' выделен в Xcode, настроенном для C89? - PullRequest
1 голос
/ 27 февраля 2020

Я читал, что логические значения в C впервые пришли с C99. Теперь мне интересно, почему bool, тем не менее, окрашивается подсветкой синтаксиса Xcode или тем, что вы называете ...
Когда кто-то ищет «dial» в настройках сборки в Xcode, всплывает «Language Dialect», и там я «набираю» - в стандарте C89, и все еще bool окрашивается.

Почему это так?

Я также прочитал это:
Использование логических значений в C

и я вижу, как они это сделали , но я также не понимаю, как работает Пример 3 и 4 ...

Option 3
typedef int bool;
enum { false, true };

Option 4
typedef int bool;
#define true 1
#define false 0

Примечание: я не понимаю, каким образом typedef int bool; мог бы в любом случае быть связан с линией enum { false, true };.

Почему xcode с C89 не игнорирует ключевое слово bool?
Как работают примеры?

1 Ответ

0 голосов
/ 27 февраля 2020

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

В случае варианта 3 он выполняет неявное преобразование из анонимного enum в int. Поскольку они являются совместимыми типами, это «всегда запрет и не меняет представление». Значения по умолчанию enum для { false, true } равны { 0, 1 }, поэтому это должно привести к тому же выводу на ассемблере. Этот ответ имеет порядок предпочтения , когда никто не знает, что выбрать.

...