Я пытаюсь найти, какая комбинация gcc-флагов используется при тестировании строгого соответствия C90. Согласно предыдущему сообщению: Параметры GCC для строжайшего кода C?, мне нужен только -std = c90.
Однако вот что я пробовал:
$ cat t.c
#include <stdint.h> /* added in C99 */
int main()
{
uint64_t t;
return 0;
}
$ gcc -std=c90 -ansi -pedantic t.c
Вышеизложенное работает хорошо (никаких предупреждений/ошибок не получено).
Кто-нибудь знает о:
- gcc флаги имеют строгое соответствие ISO/IEC 9899: 1990
- Разный компилятор (tcc, clang...) с различным набором флагов?
EDIT:
Извините за мою формулировку, да, мне очень хотелось бы подражать строго соответствующему компилятору C90, иначе говоря, он должен потерпеть неудачу, если код попытается использовать какую-либо добавленную позже функцию (C99 приходит на ум). Поэтому pthread
include header должен выпустить предупреждение при компиляции в GNU/GCC вызывает режим C90 (так же, как заголовок stdint.h должен производить предупреждение без C99). -pedantic прекрасно предупреждает меня об использовании long long
, я не понимаю, почему он не должен предупреждать меня о uint64_t
.
Я использовал терминологию ИСО/МЭК 9899: 1990, как указано из:
В 1990 году стандарт ANSI C (с изменениями форматирования) был принят Международная организация по стандартизации (ИСО) в качестве ИСО/МЭК 9899: 1990, который иногда называют C90. Следовательно, термины "C89" и "C90" относятся к одному и тому же языку программирования.
EDIT2:
Документация GCC на самом деле понятна:
Некоторые функции, входящие в стандарт C99, принимаются как расширения в режиме C90 и некоторые функции, которые являются частью C11 стандарт принимаются как расширения в режимах C90 и C99.
Итак, мой вопрос перефразирован в:
- Есть ли заголовок компилятора + standard include в linux-системе, который строго соответствует C90?