Question

je suis le portage récemment un projet de GCC à clang (auquel je fixe un certain nombre de C GNU-ISM). Cela m'a fait penser: ce C GNU-ismes (extensions du langage C pris en charge dans GCC, qui ne sont pas standardisés) existent? Y at-il une liste complète partout?

Était-ce utile?

La solution

Voici une liste assez complète directement depuis le site Web de GCC. Il semble y avoir beaucoup, donc je vous souhaite le meilleur de la chance tamiser à travers elle!

http://gcc.gnu.org /onlinedocs/gcc-4.2.0/gcc/C-Extensions.html

Autres conseils

L'un des plus beaux GNUisms que j'ai trouvé déclaration explicite clé alors que les structures de remplissage.

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

Cela ne permet pas d'ignorer les membres ou les réordonner, juste renvoie une erreur si vous le faites, mais avec plus de 100 structures d'éléments cela devient une valeur inestimable.

Bien qu'il existe de nombreuses extensions, et je suspends à la réponse de Beta pour cela, il est peu probable que votre projet repose sur un grand nombre d'entre eux. Il est possible de désactiver les extensions dans une version GNU, ce faisant simplement que vous avertir avant d'éventuelles incompatibilités potentielles dans votre base de code.

Vous pouvez rencontrer d'autres problèmes tels que le fait que GCC prend en charge la plupart des fonctionnalités C99, alors que certains compilateurs populaires ne le font pas (Microsoft VC ++ spécifiquement). Donc, vous pouvez désactiver C99 propose aussi lorsque vous testez la base de code.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top