В чем разница между GNU99 и C99 (Clang)?


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

3 51

3 ответа:

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

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

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

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

С99 прям С99, GNU99 является С99 с расширениями GNU. Смотрите GCC manpage.

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

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

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

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