Когда-то давно тип данных int был привязан к размеру регистра машины, являвшейся целью компилятора. Так, например, компилятор для 16-разрядной системы использовал бы 16-разрядное целое число.
Однако мы к счастью не видим много 16-разрядное больше, и когда 64-разрядный начал добираться, популярные люди были более обеспокоены созданием, это совместимый с более старым программным обеспечением и 32-разрядный было вокруг такого длинного, что для большинства компиляторов интервал , как просто предполагается, составляет 32 бита.
Флаг -ansi
является синонимом флага -std = c89
.
Достаточно просто использовать -std = c99
с -педантичным
.
Если есть сомнения, вы всегда можете обратиться к документации GCC . Начиная с GCC 3.4.2, следует прочитать главу 2 - Языковые стандарты, поддерживаемые GCC .
-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
должен делать то, что вы хотите.
Это старый вопрос, но я просто хотел добавить дополнительные очки.
Во-первых, независимо от множества общих коммутаторов командной строки, которую вы поставляете в GCC, в данный момент, по-видимому, не может сделать GCC сообщать все нарушения ограничений как «ошибки» и все остальное как «предупреждения». Некоторые из диагностических сообщений сообщает GCC как «предупреждения» на самом деле нарушения ограничений (то есть «ошибки») с точки зрения языка C, но нет возможности заставить GCC признать этот факт и генерировать Диагностика «Ошибка». Вполне возможно, что более точное разделение может быть достигнуто путем тонкой настройки индивидуальных типов предупреждений, но я не уверен, что настройки GCC обеспечивают достаточную гранулярность для достижения хорошего совпадения.
Во-вторых, GCC обеспечивает -педантинтиантуальные ошибки
, которые можно использовать вместо простого -педантического
, который предназначен для обеспечения более точного (как описано выше) классификация классификации Диагностические сообщения в «ошибки» и «предупреждения». Это все еще не идеально, хотя.
P.S. Спецификация языка не требует / определяет разделение диагностических сообщений в «ошибки» и «предупреждения», но на практике многие программисты ожидают, что оказывают наличие ограничения «ошибки». Я думал, что вы могли бы означать что-то подобное, когда вы упомянули «Обеспечение предупреждений / ошибок» в вашем вопросе.