В чем разница между GNU99 и C99 (Clang)?
Я видел вариант компилятора GNU99 и C99. Какая между ними разница? Любая подробная документация? (Clang, Xcode, Mac OS X)
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 также поддерживает эти расширения.