Quais ismos C GNU existem?
-
24-09-2019 - |
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?
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.