Question

À quel point la norme C99 est-elle universellement prise en charge par les compilateurs actuels? Je comprends que même GCC ne l’appuie pas pleinement. Est-ce vrai?

Quelles fonctionnalités de C99 sont mieux prises en charge que d’autres, c’est-à-dire, lesquelles puis-je utiliser pour être certain que la plupart des compilateurs me comprendront?

Était-ce utile?

La solution

Si vous voulez écrire du code C portable, je vous conseillerais alors d’écrire en C89 (ancien standard ANSI C). Cette norme est supportée par la plupart des compilateurs.

Le compilateur C d'Intel a très bien C99 prend en charge et produit des fichiers binaires rapides. (Merci 0x69 !)

MSVC prend en charge certaines nouvelles fonctionnalités et Microsoft envisagent d'élargir la prise en charge dans les versions futures.

GCC prend en charge certaines nouveautés de C99. Ils ont créé un tableau sur les statut des fonctionnalités C99 . La fonctionnalité la plus utilisable de C99 est probablement le tableau de longueur variable, et GCC le supporte maintenant. Clang (en mode C de LLVM) prend en charge la plupart des fonctionnalités, à l'exception des pragmas à virgule flottante.

Wikipedia semble avoir un résumé succinct du support C99 des compilateurs.

Autres conseils

Quelqu'un a mentionné que le compilateur Intel supporte C99. Il existe également le compilateur Comeau C / C ++ qui prend entièrement en charge C99. Ce sont les seuls que je connaisse.

Les fonctionnalités C99 que je n'utilise pas car elles ne sont pas bien supportées incluent:

  • tableaux de longueur variable
  • macros avec un nombre variable de paramètres.

Les fonctionnalités de C99 que j'utilise régulièrement et qui semblent assez bien supportées (sauf par Microsoft):

  • stdint.h
  • snprintf () - MS a un _snprintf () non standard qui présente de sérieuses limitations, qui ne terminent pas toujours la mémoire tampon et n'indiquent pas la taille de la mémoire tampon.

Pour éviter le support technique de Microsoft, j'utilise un domaine public stdint.h de MinGW (que j'ai modifié pour fonctionner également sur VC6) et un presque public domaine snprintf () de Holger Weiss

Parmi les éléments qui ne sont pas pris en charge par Microsoft, mais qui continueront d’être utilisés sur d’autres compilateurs en fonction du projet, figurent:

  • déclarations mixtes et code
  • fonctions en ligne
  • _Pragma () - cela rend les pragmas beaucoup plus utilisables

Pour gcc, il existe un tableau avec toutes les fonctionnalités prises en charge . Il semble que la plus grande chose qui manque sont les tableaux de longueur variable. La plupart des autres fonctionnalités manquantes sont des problèmes de bibliothèque plutôt que des fonctionnalités linguistiques.

Le compilateur IBM c prend en charge c99 lorsqu'il est appelé en tant que c99 mais pas lorsqu'il est appelé en tant que cc ou xlc.

Consultez le statut de suport C99 pour GNU pour plus d'informations sur les fonctionnalités actuellement prises en charge.

Sun Studio est censé être soutenir l'ensemble de la spécification C99. Je ne les ai jamais utilisées, je ne peux donc pas les confirmer.

Je ne pense pas que le compilateur Microsoft accepte la spécification C99 dans son intégralité. Ils sont beaucoup plus concentrés sur le C ++ en ce moment

Clang (le compilateur C et C ++ basé sur LLVM) supporte assez bien C99. Je pense que la seule chose qu’elle ne supporte pas, ce sont les pragmas à virgule flottante.

Microsoft semble suivre les normes C ++, mais ne prend pas en charge C99. (Ils peuvent choisir certaines fonctionnalités, mais on peut dire qu’ils choisissent C ++ 0x en cas de chevauchement.)

À partir de Visual Studio .NET 2003, l'option "Compiler le code C en tant que C ++ (/ TP)" est activée par défaut pour les nouveaux projets.

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