2014-10-21 13 views
12

Durante l'utilizzo gcc, il codice:Quale sezione dello standard C89 consente la regola "implicito int"?

register a = 3; 
static b = 3; 

è ammesso durante l'utilizzo dei -std=c89 -pedantic-errors bandiere, anche se v'è un avvertimento.

Tuttavia riceve un errore con i flag -std=c99 -pedantic-errors.

Mi chiedo quale sezione degli standard C89 consenta la regola "implicito int"?

risposta

14

La sezione che ha permesso al implicita int regola C89 sarebbe sezione 3.5.2Tipo prescrittori che dice (sottolineatura mia):

int, firmato, firmato int o nessun tipo prescrittori

Keith Thompson nei commenti sottolinea che nella C90 sezione è 6.5.2 e dice, L'unica differenza è un po 'di materiale introduttivo richiesto da ISO, con conseguente rinumerazione delle sezioni.

In C99 in cui questo è cambiato, la sezione è 6.7.2tipo specificatori e dice:

int, firmato, o firmato int

Questa è coperto anche nel documento N661: Disallow implicit "int" in declarations che dice :

Modifica in 6.5.2 Caratterizzatori di tipo; aggiungi nuova frase allo inizio del primo paragrafo dei vincoli: Almeno un identificatore di tipo deve essere indicato in gli identificatori di dichiarazione in una dichiarazione.

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

sezione 3.5.2 in ANSI C di serie 1989 è la sezione 6.5.2 della ISO standard C 1990. (I due standard descrivono esattamente la stessa lingua: l'unica differenza è un materiale introduttivo richiesto dall'ISO, con conseguente rinumerazione delle sezioni.) –

+0

@KeithThompson, grazie, mi chiedevo questo dalla proposta. –

Problemi correlati