Какая разница между GNU99 и C99 (Clang)?

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

+50
источник поделиться
3 ответа

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

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 блокируется по умолчанию в режимах gnu * на некоторых платформах; его можно включить в любом режиме с опцией -fblocks.

Другие ссылки

+38
источник

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

+18
источник

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

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

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

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

+10
источник

Посмотрите другие вопросы по меткам или Задайте вопрос