web-dev-qa-db-fra.com

Quelle est la différence entre GNU99 et C99 (Clang)?

J'ai vu l'option du compilateur GNU99 et C99. Quelle est leur différence? Une documentation détaillée? (Clang, Xcode, Mac OS X)

53
Eonil

Différences entre les différents modes standard

clang prend en charge l'option -std, qui modifie le mode linguistique utilisé par clang. Les modes pris en charge pour C sont c89, gnu89, c94, c99, gnu99 et divers alias pour ces modes. Si aucune option -std n'est spécifiée, clang utilise par défaut le mode gnu99.

Différences entre tous les modes c * et gnu *:

  • les modes c * définissent __STRICT_ANSI__.
  • Les définitions spécifiques à la cible non préfixées par des traits de soulignement, comme "linux", sont définies dans les modes gnu *.
  • Les trigraphs sont désactivés par défaut dans les modes gnu *; ils peuvent être activés par le -trigraphs option.
  • L'analyseur reconnaît "asm" et "typeof" comme mots clés dans les modes gnu *; les variantes __asm__ et __typeof__ sont reconnus dans tous les modes.
  • L'extension Apple "blocks" est reconnue par défaut dans les modes gnu * sur certaines plateformes; elle peut être activée dans n'importe quel mode avec le -fblocks option.

Plus de liens

43
Matt Joiner

C99 est C99 droit, GNU99 est C99 avec des extensions GNU. Voir page de manuel GCC .

18
Paul R

C99 est simplement la version de la norme C à partir de 1999 comme nous le savons tous. Dans GCC, il n'est pas entièrement pris en charge.

GNU99 est une extension de C99, tout comme GNU98 est une extension de C98. De la documentation:

ISO C99 plus GNU. Lorsque ISO C99 sera entièrement implémenté dans GCC, cela deviendra la valeur par défaut. Le nom gnu9x est déconseillé.

Clang prend également en charge ces extensions.

10
user142019