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?

È stato utile?

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.

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