Forum: PC-Programmierung wie unbekannte defines anzeigen lassen ?


von interrupt (Gast)


Lesenswert?

Hallo,
eine Frage :

In Programmierumgebungen wie bei cpp sind ja viele #defines 
initialisiert, z.B. "__cplusplus" etc.
Die Prüfung darauf mit #ifdef ist trivial, aber wie kann man sich z.B. 
am Anfang eines Programmes eine Liste von vorhandenen #defines anzeigen 
lassen, ohne genau zu wissen, was alles definiert ist ?

THX !

von meckerziege (Gast)


Lesenswert?


von Rainer Zufall (Gast)


Lesenswert?

Danke,
die Kommandos

echo | gcc -dM -E -
echo | gcc -x c++ -std=c++11 -dM -E -
echo | gcc -x c++ -std=c++14 -dM -E -
echo | gcc -x c++ -std=c++17 -dM -E -
echo | gcc -x c++ -std=c++20 -dM -E -

funktionieren bestens und geben jede Menge defines aus.

Unter anderem als neueste Version

#define __cplusplus 201703L

Es handelt sich um den aktuellen mingw64 Compiler.
Wie stellt sich das im Vergleich mit anderen C++ - Compilern dar ?

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Rainer Zufall schrieb:
> #define __cplusplus 201703L
>
> Es handelt sich um den aktuellen mingw64 Compiler.
> Wie stellt sich das im Vergleich mit anderen C++ - Compilern dar ?

Das __cplusplus Makro ist vom C++-Standard vorgegeben und hängt auch von 
den Compiler-Optionen ab. Wenn du also mit -std=c++14 kompilierst hat es 
einen anderen Wert (201402L). Im Prinzip sollte es immer die 
eingestellte Sprachversion anzeigen, unabhängig vom Compiler.

Hier sind die definierten Werte aufgeführt:
https://en.cppreference.com/w/cpp/preprocessor/replace#Predefined_macros

von Rainer Zufall (Gast)


Lesenswert?

Mit dem vorigen Post wollte ich zeigen, dass die aktuelle 
mingw64-Version bis zu "-std=c++17" unterstützt.
Bei -std=c++20 kommt keine Antwort mehr.
Wie sieht das bei anderen Compilern aus ?

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Hier ist eine detaillierte Auflistung, welcher Compiler welche 
Sprachelemente unterstützt:

https://en.cppreference.com/w/cpp/compiler_support

Den Makro-Wert 201703L sollten Compiler natürlich nur setzen, wenn sie 
C++17 auch vollständig unterstützen. Solche Listen sind aber schnell 
veraltet. Am Besten schaut man sich konkret an, was der gewünschte 
Compiler derzeit unterstützt.

von Rolf M. (rmagnus)


Lesenswert?

Und hier findet man eine Sammlung vordefinierter Makros:
https://sourceforge.net/p/predef/wiki/Home/

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.