GCC Optionen Ansi C Standardprüfung zu erzwingen?
Frage
Was für gcc-Optionen soll ich verwenden ANSI C (C99) Warnungen / Fehler zu erzwingen? gcc (GCC) 3.4.2 (mingw-special)
Ich verwende: gcc -pedantic -ansi -std = c99 ist das richtig?
Lösung
Die -ansi
Flagge ist mit der -std=c89
Flagge synonym.
Nur mit -std=c99
mit -pedantic
sollte ausreichend sein.
Wenn Sie Zweifel haben, können Sie immer auf die GCC-Dokumentation verweisen. Ab GCC 3.4.2, ist das Kapitel zu lesen 2 - Sprechen Standards Unterstützt von GCC
.Andere Tipps
Dies ist eine alte Frage, aber ich wollte nur ein paar zusätzliche Punkte hinzuzufügen.
Erstens, unabhängig von der Menge der generischen Befehlszeilenoptionen Sie GCC liefern, die derzeit nicht zu sein scheinen möglich GCC zu machen zu berichten alle Einschränkungsverletzungen als „Fehler“ und alles sonst als „Warnungen“. Einige der Diagnosemeldungen GCC-Berichte als „Warnungen“ sind in der Tat Einschränkungsverletzungen (zB „Fehler“) aus der Sicht der C-Sprache, aber es gibt keine Möglichkeit, GCC zu zwingen, diese Tatsache zu erkennen und ein „Fehler“ Diagnose erzeugen. Durchaus möglich, dass eine genauere Trennung kann durch die Feinabstimmung individueller Warntypen erreicht werden, aber ich bin nicht sicher, ob GCC Einstellungen ausreichende Granularität bieten eine gute Übereinstimmung zu erreichen.
Zweitens bietet GCC -pedantic-errors
Option, anstelle von einfachen -pedantic
verwendet werden kann, die eine genauere ermöglichen sollten Klassifizierung von Diagnosemeldungen in den „Fehler“ (wie oben beschrieben), und „Warnungen“. Es ist zwar noch nicht perfekt.
P. S. Die Sprachspezifikation nicht erforderlich / definiert die Trennung von Diagnosemeldungen in „Fehler“ und „Warnungen“, aber in der Praxis viele Programmierer erwarten Einschränkungsverletzungen als „Fehler“ gemeldet werden. Ich dachte, dass Sie vielleicht etwas wie die gemeint haben, wenn Sie erwähnten in Ihrer Frage „Warnungen / Fehler erzwingen“.
-ansi
In C mode, this is equivalent to -std=c89. In C++ mode, it is equivalent to -std=c++98.
ANSI C ist nicht die gleiche wie C99 (noch) nicht. Auch -Wall
könnte auch von Interesse sein, aber nur -pedantic
sollte das tun, was Sie wollen.