Alcune caratteristiche C89 non sono validi C99
Probabilmente, esistono quelle caratteristiche solo per ragioni storiche, e non deve essere utilizzato nel codice C89 moderna, ma esistono.
The C99 N1256 standard draft prefazione paragrafo 5 confronta C99 a revisioni precedenti, ed è un buon punto di partenza per cercare quelle incompatibilità, anche se ha di gran lunga più estensioni di restrizioni.
implicito ritorno int e tipi di variabili
citati di Lutz in un commento, ad esempio i seguenti sono C89 valida:
static i;
f() { return 1; }
ma non C99, in cui si deve scrivere:
static int i;
int f() { return 1; }
Questo preclude anche funzioni senza prototipi chiamando in C99: Are prototypes required for all functions in C89, C90 or C99?
n1256 dice:
rimuovere implicit int
ritorno senza espressione per la funzione non vuoto
valido C89, C99 non valida:
int f() { return; }
Penso che in C89 che restituisce un valore di implementazione definito.n1256 dice:
ritorno senza espressione non consentita in funzione che restituisce un valore
Divisione intera all'operando negativo
- C89: giri ad una direzione di attuazione definite
- C99: round a 0
Quindi, se il compilatore è stato arrotondato a -inf
e si è basato su tale comportamento definito dall'implementazione, il compilatore è ora costretto a violare il codice su C99.
https://stackoverflow.com/a/3604984/895245
n1256 dice:
intero affidabile divisione
compatibilità con Windows
Una delle principali preoccupazioni pratica è essere in grado di compilare in Windows, dal momento che Microsoft does not intend to implement C99 fully too soon .
Questo è ad esempio il motivo per cui libgit2 limits allowed C99 features.
grazie a tutte le risposte. Vedo i professionisti più dei contro qui, quindi comprimere gli oggetti e passare al c99 ora: p – kar