Почему gcc поддерживает логический тип с std = gnu89? - PullRequest
0 голосов
/ 27 августа 2018

Почему gcc поддерживает логический тип с std = gnu89?Сначала я думаю, что gcc не поддерживает это.

Чтобы проверить это, я написал один файл c, как показано ниже.

#include <stdio.h>
#include <stdbool.h>
int main(int argc, const char *argv[]) {
    bool x;
    printf("size of bool:%lu\n",sizeof(x));
    return 0;
}

И я запустил gcc:

$ gcc -std=gnu89 my_ex.c

Но это удалось.

Можем ли мы использовать логический тип, даже если с -std=gnu89?Если так, то в чем причина?

1 Ответ

0 голосов
/ 27 августа 2018

Онлайновая ссылка C гласит, что :

Язык программирования C, начиная с C99, поддерживает булеву арифметику со встроенным типом _Bool(см. _Bool).Если заголовок включен, логический тип также доступен как bool .

Далее, из этой GNU ссылка ,

Вы также можете явно выбрать расширенную версию языка C с помощью -std =gnu89 (для C89 с расширениями GNU) или -std = gnu99 (для C99 с расширениями GNU).По умолчанию, если не заданы опции диалекта языка C, это -std = gnu89;это изменится на -std = gnu99 в некоторых будущих выпусках, когда поддержка C99 будет завершена. Некоторые функции, являющиеся частью стандарта C99, принимаются в качестве расширений в режиме C89 .

Стандарт ISO C определяет (в разделе 4) два класса соответствующей реализации.Соответствующая размещенная реализация поддерживает весь стандарт, включая все возможности библиотеки;соответствующая отдельно стоящая реализация требуется только для предоставления определенных библиотечных средств: тех, которые находятся в,, и;начиная с AMD1, также и в;и в C99, также те, что в и.

Таким образом, как видно из выделенных частей выше, некоторые функции, являющиеся частью стандарта C99, принимаются как расширения в режиме C89. И bool является одной из таких функций .

...