2014-10-21 2 views
12

При использовании gcc, код:Какой раздел в стандарте C89 допускает правило «неявного int»?

register a = 3; 
static b = 3; 

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

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

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

ответ

14

раздел, который позволил неявному INT правила в C89 будет раздел 3.5.2Тип спецификаторов который говорит (внимание шахтное):

INT, подписанные, подписанный ИНТ или нет типа спецификаторы

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

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

INT, подписанный или подписанный ИНТ

Это также описано в документе N661: Disallow implicit "int" in declarations, который говорит :

Изменение в 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 
+4

Раздел 3.5.2 в стандарте ANSI C 1989 года является раздел 6.5.2 в стандарте ISO C 1990 года. (Эти два стандарта описывают точно такой же язык. Единственное отличие - это некоторый вводный материал, требуемый ISO, в результате которого происходит нумерация разделов.) –

+0

@ KeithThompson спасибо, мне было интересно об этом из предложения. –