GCC-Optionen zum Erzwingen der Ansi C-Standardprüfung?

Lesezeit: 3 Minuten

Benutzer-Avatar
AlfaTeK

Welche gcc-Optionen soll ich verwenden, um ANSI C (C99)-Warnungen/-Fehler zu erzwingen? gcc (GCC) 3.4.2 (mingw-Spezial)

Ich verwende: gcc -pedantic -ansi -std=c99 ist das richtig?

  • ANSI veröffentlichte den ursprünglichen C-Standard im Jahr 1989. ISO veröffentlichte seine Version desselben Standards im Jahr 1990, und ANSI übernahm diese Version offiziell. ISO hat 1999 und 2011 neue Ausgaben des Standards veröffentlicht, und ANSI hat jede von ihnen übernommen, wodurch die früheren Ausgaben offiziell veraltet sind. Verwirrenderweise wird der Begriff “ANSI C” immer noch häufig (und fälschlicherweise) verwendet, um sich auf die Sprache zu beziehen, die in den Ausgaben von 1989/1990 definiert wurde, und gcc -ansi bezieht sich immer noch auf diese Version. Ich schlage vor, dass der Begriff “ANSI C” mehrdeutig ist und vermieden werden sollte. Siehe stattdessen C89/C90, C99 oder C11.

    – Keith Thompson

    2. Februar 2015 um 15:25 Uhr

Benutzer-Avatar
James McNellis

Das -ansi Flagge ist gleichbedeutend mit der -std=c89 Flagge.

Nur mit -std=c99 mit -pedantic sollte ausreichen.

Im Zweifel kannst du das immer siehe GCC-Dokumentation. Ab GCC 3.4.2 ist das Kapitel zu lesen 2 – Von GCC unterstützte Sprachstandards.

  • -std=c99 mit -pedantic… : Ich verstehe den Unterschied zwischen diesem und nicht -std=c89meintest du die -ansi Fehler würden als Warnungen angezeigt?

    – VimNing

    17. Februar 2021 um 4:24 Uhr

Benutzer-Avatar
AnT steht zu Russland

Dies ist eine alte Frage, aber ich wollte nur einige zusätzliche Punkte hinzufügen.

Erstens scheint es derzeit nicht möglich zu sein, unabhängig davon, welche generischen Befehlszeilenschalter Sie GCC zur Verfügung stellen, GCC dazu zu bringen, alle zu melden Beschränkungsverletzungen als “Fehler” und alles andere als “Warnungen”. Einige der Diagnosemeldungen, die GCC als “Warnungen” meldet, sind tatsächlich Beschränkungsverletzungen (dh “Fehler”) aus Sicht der C-Sprache, aber es gibt keine Möglichkeit, GCC zu zwingen, diese Tatsache zu erkennen und eine “Fehler”-Diagnose zu generieren. Es ist durchaus möglich, dass durch Feinabstimmung einzelner Warntypen eine genauere Trennung erreicht werden kann, aber ich bin mir nicht sicher, ob die GCC-Einstellungen eine ausreichende Granularität bieten, um eine gute Übereinstimmung zu erzielen.

Zweitens bietet GCC -pedantic-errors Option, die anstelle von plain verwendet werden kann -pedantic, der eine genauere (wie oben beschriebene) Einteilung von Diagnosemeldungen in „Fehler“ und „Warnungen“ ermöglichen soll. Es ist aber immer noch nicht perfekt.

PS: Die Sprachspezifikation verlangt/definiert keine Trennung von Diagnosemeldungen in „Fehler“ und „Warnungen“, aber in der Praxis erwarten viele Programmierer, dass Verletzungen von Beschränkungen als „Fehler“ gemeldet werden. Ich dachte, Sie hätten vielleicht so etwas gemeint, als Sie in Ihrer Frage “Erzwingen von Warnungen/Fehlern” erwähnten.

  • Gute Beobachtungen. Jedenfalls glaube ich, da C so viele gefährliche Dinge zulässt, dass die einzig vernünftige Art zu arbeiten darin besteht, damit umzugehen irgendein Warnung als Fehler (dh Sie sind nicht fertig, bis es mit baut -Werror). Dann spielt es keine Rolle, ob einige Fehler fälschlicherweise als Warnungen gemeldet werden.

    – schleske

    2. Februar 2015 um 9:18 Uhr

-ansi
    In C mode, this is equivalent to -std=c89. In C++ mode, it is equivalent to -std=c++98.

ANSI C ist (noch) nicht dasselbe wie C99. Ebenfalls, -Wall könnte auch interessant sein, aber nur -pedantic soll machen was du willst.

  • “ANSI C ist nicht dasselbe wie C99”. ANSI hat C99 als Standard übernommen. Es ist nur so, dass C89 aus irgendeinem Grund “ANSI C” genannt wurde, um es von Pre-Standard C zu unterscheiden, und der Name ist geblieben.

    – Steve Jessop

    30. November 2009 um 23:01 Uhr

1027910cookie-checkGCC-Optionen zum Erzwingen der Ansi C-Standardprüfung?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy