В чем разница между GNU99 и C99 (Clang)? - PullRequest
52 голосов
/ 15 марта 2011

Я видел опцию компилятора GNU99 и C99.В чем их разница?Любая подробная документация?(Clang, Xcode, Mac OS X)

Ответы [ 3 ]

42 голосов
/ 16 марта 2011

Различия между различными стандартными режимами

clang поддерживает параметр -std, который изменяет используемый языковой режим clang.Поддерживаемые режимы для C: c89, gnu89, c94, c99, gnu99 и различные псевдонимы для этих режимов.Если опция -std не указана, по умолчанию для clang используется режим gnu99.

Различия между всеми режимами c * и gnu *:

  • c * определяют __STRICT_ANSI__.
  • Определенные для цели определения без префикса подчеркивания, такие как "linux", определяются в режимах gnu *.
  • По умолчанию триграфы отключены в режимах gnu *;они могут быть включены опцией -trigraphs.
  • Анализатор распознает "asm" и "typeof" как ключевые слова в режимах gnu *;варианты __asm__ и __typeof__ распознаются во всех режимах.
  • Расширение Apple "blocks" распознается по умолчанию в режимах gnu * на некоторых платформах;он может быть включен в любом режиме с опцией -fblocks.

Дополнительные ссылки

18 голосов
/ 15 марта 2011

C99 - это прямой C99, GNU99 - это C99 с расширениями GNU.См. Справочную страницу GCC .

10 голосов
/ 15 марта 2011

C99 - это просто версия стандарта C от 1999 года, как мы все это знаем. В GCC это поддерживается не полностью.

GNU99 - это расширение C99, точно так же, как GNU98 - это расширение C98. Из документов:

ISO C99 плюс расширения GNU. Когда ISO C99 полностью внедрен в GCC, это станет значением по умолчанию. Имя gnu9x устарело.

Clang также поддерживает эти расширения.

...