2014-10-21 9 views
12

Podczas korzystania gcc, kod:Która sekcja normy C89 dopuszcza regułę "implicit int"?

register a = 3; 
static b = 3; 

jest dozwolone podczas korzystania z -std=c89 -pedantic-errors flagi, chociaż nie jest ostrzeżeniem.

Otrzymuje jednak błąd z flagami -std=c99 -pedantic-errors.

Zastanawiam się, która sekcja standardów C89 dopuszcza regułę "implicit int"?

Odpowiedz

14

sekcji, która pozwoliła niejawny int reguła C89 będzie sekcja 3.5.2Rodzaj Specyfikatory który mówi (podkr):

int podpisana podpisana int, lub nie typ specifiers

Keith Thompson w komentarzach zaznacza, że ​​w C90 sekcja jest 6.5.2 i mówi, Jedyną różnicą jest materiał wprowadzający wymagany przez ISO, co powoduje zmianę numeracji sekcji.

W C99 gdzie to się zmieniło, sekcja jest 6.7.2Rodzaj Specyfikatory i mówi:

int, podpisane lub podpisane int

ta jest również objęte dokumentem N661: Disallow implicit "int" in declarations który mówi :

Zmiana w 6.5.2 Specyfikatory specyfikacji; dodać nowe zdanie na początek pierwszego akapitu Ograniczeń: Przynajmniej jeden specyfikator typu powinien być podany w w deklaracji deklaratorów.

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

Sekcja 3.5.2 w standardzie 1989 ANSI C jest sekcja 6.5.2 w normie ISO 1990 C. (Oba standardy opisują dokładnie ten sam język.) Jedyną różnicą jest materiał wprowadzający wymagany przez ISO, co powoduje zmianę numeracji sekcji.) –

+0

@ KeithThompson, dziękuję, zastanawiałem się nad tym z wniosku. –