Domanda

Io di solito scrivere il codice C in C89, ora alcune caratteristiche di C99 (come intxx_t o __VA_ARGS__ o snprintf) sono molto utili, e possono essere anche di vitale importanza.

Prima di più le mie esigenze da C89 a C99 volevo sapere quali delle caratteristiche C99 sono stati ampiamente supportati e quelli che non sono stati ampiamente supportate o addirittura, giudicato dannoso.

So che abbiamo potuto solo controllare il nostro supporto del compilatore bersaglio, ma questo sarebbe limitare il nostro sostegno molto, e come questo è per il software open source, preferirei avere un sostegno più ampio.

Per esempio, usiamo Solaris (suncc) compilatore e gcc, ma ci potrebbe essere altro compilatore avremmo spostare allontanato mentre potremmo mantenere la compatibilità con molto poco sforzo.

Per esempio, non ho mai lavorato su Windows e non so nulla di compilatori di Windows, ma sarebbe bene mantenere la compatibilità di Windows.

È stato utile?

Soluzione

Un certo numero di caratteristiche C99 sono facoltativi, quindi la loro mancanza non è tecnicamente non conforme. Non voglio distinguere sotto.

  • Hmm, vincere non ha <stdint.h>, anche se c'è un open versione -source di stdint.h per Microsoft . Anche quando viene implementato il file, molti dei singoli tipi sono mancanti.

  • Supporto Complex e immaginario è spesso mancante o rotto.

  • identificatori estese e caratteri estesi possono essere punti problematici.

questo elenco di C99 caratteristica problemi in gcc.

Altri suggerimenti

goto è ancora href="http://en.wikipedia.org/wiki/Considered_harmful" rel="noreferrer"> considerato dannoso .


In qualche modo ho raccolto quattro giù voti. Ho presentato la dichiarazione di cui sopra per aggiungere la leggerezza, e sono solo il 30% sul serio il concetto dietro di esso.

Mi aspetto che i voti sono giù da giovani che non capiscono la storia dei linguaggi di programmazione. Non ogni goto è il male, ma-rispetto al 100% spaghetti code non adulterata ho lavorato su (milioni di righe di FORTRAN 66) -è ragionevole e produttivo per sostituire il maggior numero di dichiarazioni goto con dichiarazioni strutturati (for, while, do .. while, switch) come possibile. Ma a volte un goto è bene quando evita la complessità, come ad esempio le variabili di bandiera in più per uscire da più cicli annidati.

Bene, GCC è fondamentalmente sta per essere gcc, indipendentemente da quale sistema operativo desktop che stai targeting.

Visual C ++, essendo principalmente un compilatore C ++, non è così preoccupato con le specifiche C99. stdint.h fa dichiarare le macro intxx_t preferiti. __VA_ARGS__ è disponibile. _Bool, _Complex, e _Pragma non sono implementati sul compilatore Microsoft Visual C ++. Sono abbastanza sicuro% a campi in printf / scanf non sono state attuate, anche se forse VC2010 li gestisce. snprintf è presente, ma ha una sottolineatura e semantica leggermente differente.

Risposta breve: La caratteristica C99 più "facile" è quello di implementare senza cambiare le grammatiche del compilatore o replumbing della libreria standard, più è probabile che VC ++ è per sostenerlo. Se c'è un conflitto tra C99 e C ++, C ++ si aspettano di vincere.

sizeof runtime è un incubo di scrittori del compilatore. Quindi considero è dannoso.

glibc non implementa un realloc C99 conforme, quindi realloc(ptr, 0) non è portatile.

http://sourceware.org/bugzilla/show_bug.cgi?id=12547

restrict è diventato una parola chiave in C99. Questo sta avendo il sopravvento sulla realizzazione dello spazio dei nomi degli utenti. Se si dispone di un programma di C89 valida che contiene la parola restrict, è necessario modificare il programma per farlo funzionare con C99. In altre parole: nessuna compatibilità all'indietro. Se avevano intenzione di rompere la compatibilità a ritroso, essi dovrebbero avere gets rimosso dal primo standard.

il tipo generico funzioni matematiche da <tgmath.h> non sono necessariamente ampiamente implementati, anche se sembrano essere fornito con GCC 4.2.1 su MacOS X 10.6.2.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top