Подтвердить что ты не робот

Какой раздел в стандарте C89 допускает правило "неявное int"?

При использовании gcc код:

register a = 3;
static b = 3;

разрешено использовать флаги -std=c89 -pedantic-errors, хотя есть предупреждение.

Однако он принимает ошибку с флагами -std=c99 -pedantic-errors.

Интересно, какой раздел стандартов C89 допускает правило "неявного int"?

4b9b3361

Ответ 1

Раздел, разрешающий неявное правило int в C89, будет сектором 3.5.2 Спецификаторы типов, который говорит (выделение мое):

int, signed, signed int, или нет спецификаторов типа

Кит Томпсон в комментариях указывает, что в C90 раздел 6.5.2 и говорит: "Единственное различие - это некоторый вводный материал, требуемый ISO, в результате которого происходит нумерация разделов.

В C99, где это изменилось, раздел 6.7.2 Спецификаторы типов, и он говорит:

int, подписанный или подписанный int

Это также рассматривается в документе N661: Запретить неявный "int" в объявлениях, в котором говорится:

Изменить в 6.5.2 Спецификаторы типа; добавить новое предложение в         начало первого абзаца ограничений:                 По меньшей мере один спецификатор типа должен быть указан в                 спецификаторы декларации в объявлении.

    Change in 6.5.2 Type specifiers, Constraints, from:
            -- int, signed, signed int, or no type
               specifiers
    to:
            -- int, signed, or signed int