Pergunta

Recentemente, eu estava portando um projeto do GCC para o clang (no qual corrigi vários ismos C GNU).Isso me fez pensar:quais ismos C GNU (extensões para a linguagem C suportadas no GCC, que não são padronizadas)?Existe uma lista abrangente em algum lugar?

Foi útil?

Solução

Aqui está uma lista bastante abrangente diretamente do site da GCC. Parece haver bastante, então desejo -lhe boa sorte penestando nele!

http://gcc.gnu.org/onlinedocs/gcc-4.2.0/gcc/c-extensions.html

Outras dicas

Um dos GNUismos mais legais que encontrei foi a declaração explícita de chaves ao preencher estruturas.

 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 };
 }

Isso não permite pular membros ou reordená-los, apenas gera um erro se você fizer isso, mas com mais de 100 estruturas de elementos isso se torna inestimável.

Embora existam muitas extensões, e eu adiei a resposta da Beta para isso, é improvável que seu projeto deite -se em muitos deles. É possível desativar extensões em uma compilação da GNU, portanto, simplesmente fazer isso lhe dará um aviso antecipado de quaisquer possíveis incompatibilidades em sua base de código.

Você pode encontrar outros problemas, como o fato de o GCC suportar a maioria dos recursos C99, enquanto alguns compiladores populares não (Microsoft VC ++ especificamente). Portanto, você também pode desativar os recursos C99 quando você testar a base de código.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top