Che esistono C GNU-ismi?
-
24-09-2019 - |
Domanda
I è stato recentemente il porting di un progetto da GCC a clang (in cui ho fissato una serie di C GNU-ismi). Questo mi ha fatto pensare: che cosa esiste C GNU-ismi (estensioni al linguaggio C supportato in GCC, che non sono standardizzati)? Esiste una lista completa ovunque?
Soluzione
Ecco un elenco rettilineo abbastanza completa dal sito web di GCC. Sembra che ci sia un bel po ', quindi vi auguro buona fortuna vagliatura attraverso di essa!
http://gcc.gnu.org /onlinedocs/gcc-4.2.0/gcc/C-Extensions.html
Altri suggerimenti
Una delle più belle GNUisms ho trovato è stato dichiarazione esplicita chiave durante il riempimento delle strutture.
struct canmsg_t {
short flags;
int cob;
canmsg_id_t id;
unsigned long timestamp;
unsigned int length;
unsigned char data[CAN_MSG_LENGTH];
};
canmsg_t msg =
{
["flags"] = 0x00;
["cob"] = 0;
["id"] = 0x534;
["timestamp"] = 0;
["length"] = 1;
["data"] = { 0 };
}
Questo non consente di saltare membri o di riordino loro, solo genera un errore se lo fate, ma con oltre 100 strutture elemento questo diventa prezioso.
Anche se ci sono molte estensioni, e rinviare alla risposta di Beta per questo, è improbabile che il progetto si basa su molti di loro. E 'possibile disabilitare le estensioni in una compilazione GNU, così semplicemente facendo che vi darà preavviso di eventuali incompatibilità nella vostra base di codice.
È possibile riscontrare altri problemi come ad esempio il fatto che supporta la maggior parte del CCG C99 caratteristiche, mentre alcuni compilatori popolari non lo fanno (Microsoft VC ++ in particolare). Quindi si consiglia di disabilitare la C99 dispone anche quando si prova il codice di base.