44 votes

Dans quelle mesure C99 est-il pris en charge de manière universelle?

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

Quelles fonctionnalités de C99 sont mieux supportées que d’autres, c’est-à-dire que puis-je utiliser pour être bien sûr que la plupart des compilateurs me comprendront?

Merci

24voto

KovBal Points 954

Si vous voulez écrire portable code en C, alors je vous suggère d'écrire en C89 (vieux C ANSI standard). Ce standard est pris en charge par la plupart des compilateurs.

Intel Compilateur C est très bon support C99 et il produit rapidement des fichiers binaires. (Merci 0x69!)

MSVC prend en charge certaines fonctionnalités nouvelles et plan de Microsoft pour élargir le soutien dans une future version.

GCC prend en charge de nouvelles choses de C99. Ils ont créé un tableau sur l' état des fonctions C99. Probablement le plus utilisable fonction de C99 est la longueur variable de tableau, et GCC supporte maintenant. Clang LLVM (C rieuses) prend en charge la plupart des fonctions à l'exception de virgule flottante pragmas.

Wikipedia semble avoir un bon résumé de C99 de soutien des compilateurs.

16voto

Michael Burr Points 181287

Quelqu'un a mentionné le compilateur Intel a support C99. Il y a aussi le Comeau compilateur C/C++ qui prend totalement en charge du C99. Ce sont les seuls que je suis au courant de.

C99 fonctionnalités que je n'utilise pas parce qu'ils ne sont pas bien pris en charge comprennent:

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

C99 fonctionnalités que j'utilise régulièrement et qui semblent être assez bien pris en charge (sauf par Microsoft):

  • stdint.h
  • snprintf() - MS a un non-standard _snprintf() qui a de sérieuses limitations de ne pas toujours null de la fin de la mémoire tampon et en n'indiquant pas la taille de la mémoire tampon doit être

Pour contourner Microsoft de soutien, j'utilise un domaine public stdint.h de MinGW (que j'ai modifié à travailler sur VC6) et un près de domaine public snprintf() de Holger Weiss

Les éléments qui ne sont pas pris en charge par Microsoft, mais encore l'utiliser sur d'autres compilateurs en fonction du projet comprennent:

  • mixte déclarations et le code
  • les fonctions inline
  • _Pragma() - ce qui rend la pragmas beaucoup plus utilisable

7voto

Torsten Marek Points 27554

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 de langage.

5voto

frankster Points 790

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.

3voto

Benoit Points 12985

Regardez C99 suport statut pour GNU pour plus de détails sur les fonctions qui sont prises en charge actuellement.

Sun Studio est présenté à l'appui de l'ensemble de la C99 spec. Je n'ai jamais utilisé, donc je ne peux pas confirmer.

Je ne crois pas que le compilateur de microsoft prend en charge le C99 spec dans son intégralité. Ils sont beaucoup plus centrées sur le C++ pour le moment

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X