GCC zwingen, die .cpp-Datei als C zu kompilieren

Lesezeit: 2 Minuten

Benutzeravatar von ralight
leicht

Ich habe eine extern bereitgestellte .cpp-Datei. Es ist eine Mischung aus C-kompatiblem Code und ein bisschen C++. Der C++-Code ist nur ein Wrapper um C, um C++-Features zu nutzen.

Es verwendet #ifdef __cplusplus Makros zum Schutz des C++-Codes, was großartig ist. Wenn ich versuche, mit GCC zu kompilieren, wird es leider aufgrund der Dateiendung als C++ behandelt. Ich kenne die Unterschiede zw gcc und g++ – Ich möchte nicht als C++ kompilieren.

Gibt es eine Möglichkeit, GCC zu zwingen, diese Datei als C-Datei zu behandeln? Ich habe versucht mit zB --std=c99aber dies erzeugt korrekterweise den Fehler, dass C99 für C++ nicht gültig ist.

Das Umbenennen der Datei in .c funktioniert, aber ich möchte dies nach Möglichkeit vermeiden, da es extern bereitgestellt wird und es schön wäre, wenn es eine unberührte Kopie bleiben würde.

  • Manchmal, wenn ich SO Fragen sehe. Ich möchte nur ein großes RTFM schreien!! man gcc. Für diesen König der Fragen braucht es tatsächlich weniger Zeit als das Schreiben der Frage.

    – log0

    18. November 2010 um 15:21 Uhr

  • Ich hatte das gleiche Problem, weil ich reinen C-Code in eine .cpp-Datei kompilieren wollte … offensichtlich bin ich ein ziemlicher Anfänger, was C. RTFM angeht! ist dann kein so guter Rat. gcc-Manpages umfassen 11.000 Zeilen und es ist ziemlich schwierig, dort eine Lösung zu finden, wenn Sie nicht wissen, wonach Sie suchen müssen.

    – Tod

    4. November 2011 um 8:05 Uhr

  • Ich bin anderer Meinung, das Lesen der Dokumentation ist nie Zeitverlust, und die Dokumentation von GCC ist meiner Meinung nach gut geschrieben

    – Basile Starynkevitch

    26. April 2021 um 14:26 Uhr

Benutzeravatar von Michael Mrozek
Michael Mrozek

Das -x Option für gcc können Sie die Sprache aller folgenden Eingabedateien angeben:

$ gcc -x c your-file-name.cpp

Wenn Sie nur diese eine Datei in einem Sonderfall behandeln möchten, können Sie verwenden -x none zum Abschalten der Sonderbehandlung:

$ gcc -x c your-filename.cpp -x none other-file-name.cpp

(your-filename.cpp wird als C kompiliert, während other-file-name.cpp wird die Erweiterung verwenden und als C++ kompilieren)

  • Wie peinlich, da muss ich einfach vorbeigeblättert haben! Vielen Dank, das gleiche gilt für alle anderen, die geantwortet haben.

    – hell

    18. November 2010 um 15:23 Uhr

Kompilieren foo.cpp Als C-Datei können Sie eine neue Datei mit dem Namen erstellen foo.c und setze folgendes als seinen gesamten Inhalt:

#include "foo.cpp"

Jetzt kompilieren foo.c Anstatt von foo.cpp.

Wir haben dies verwendet, um den anderen Weg zu gehen (kompilieren Sie a .c Datei als C++), um damit zu beginnen, C++-Funktionen in einigen Dateien zu verwenden und gleichzeitig ihre jahrzehntelange CVS-Geschichte zu bewahren. Außerdem verwenden wir den nativen Compiler jeder Plattform, nicht nur GCC, sodass wir den nicht finden mussten -x äquivalenten Befehl für ein halbes Dutzend Compiler, und lassen Sie dann unser Build-System diesen Befehl nur auf bestimmte Dateien anwenden.

  • Funktioniert als charmante und schnellstmögliche Lösung, denke ich.

    – Mischo5500

    18. Januar 2016 um 21:36 Uhr

1401010cookie-checkGCC zwingen, die .cpp-Datei als C zu kompilieren

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

Privacy policy