Ответ 1
Различия между различными стандартными режимами
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
.