Опции GCC осуществить Ansi C стандартная проверка?

Когда-то давно тип данных int был привязан к размеру регистра машины, являвшейся целью компилятора. Так, например, компилятор для 16-разрядной системы использовал бы 16-разрядное целое число.

Однако мы к счастью не видим много 16-разрядное больше, и когда 64-разрядный начал добираться, популярные люди были более обеспокоены созданием, это совместимый с более старым программным обеспечением и 32-разрядный было вокруг такого длинного, что для большинства компиляторов интервал , как просто предполагается, составляет 32 бита.

10
задан Georg Fritzsche 19 June 2010 в 14:35
поделиться

3 ответа

Флаг -ansi является синонимом флага -std = c89 .

Достаточно просто использовать -std = c99 с -педантичным .

Если есть сомнения, вы всегда можете обратиться к документации GCC . Начиная с GCC 3.4.2, следует прочитать главу 2 - Языковые стандарты, поддерживаемые GCC .

22
ответ дан 3 December 2019 в 14:34
поделиться
-ansi
    In C mode, this is equivalent to -std=c89. In C++ mode, it is equivalent to -std=c++98.

ANSI C - это не то же самое, что C99 (пока что). Кроме того, -Wall также может быть интересным, но только -pedantic должен делать то, что вы хотите.

3
ответ дан 3 December 2019 в 14:34
поделиться

Это старый вопрос, но я просто хотел добавить дополнительные очки.

Во-первых, независимо от множества общих коммутаторов командной строки, которую вы поставляете в GCC, в данный момент, по-видимому, не может сделать GCC сообщать все нарушения ограничений как «ошибки» и все остальное как «предупреждения». Некоторые из диагностических сообщений сообщает GCC как «предупреждения» на самом деле нарушения ограничений (то есть «ошибки») с точки зрения языка C, но нет возможности заставить GCC признать этот факт и генерировать Диагностика «Ошибка». Вполне возможно, что более точное разделение может быть достигнуто путем тонкой настройки индивидуальных типов предупреждений, но я не уверен, что настройки GCC обеспечивают достаточную гранулярность для достижения хорошего совпадения.

Во-вторых, GCC обеспечивает -педантинтиантуальные ошибки , которые можно использовать вместо простого -педантического , который предназначен для обеспечения более точного (как описано выше) классификация классификации Диагностические сообщения в «ошибки» и «предупреждения». Это все еще не идеально, хотя.

P.S. Спецификация языка не требует / определяет разделение диагностических сообщений в «ошибки» и «предупреждения», но на практике многие программисты ожидают, что оказывают наличие ограничения «ошибки». Я думал, что вы могли бы означать что-то подобное, когда вы упомянули «Обеспечение предупреждений / ошибок» в вашем вопросе.

8
ответ дан 3 December 2019 в 14:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: