Frage

Wer weiß, wie kann ich herausfinden, welche cl.exe die builtin / vordefinierte Makros sind? Zum Beispiel für gcc wird die folgende Befehlszeile eine Liste aller eingebauten Makros des Compilers

gcc -dM -E - </dev/null

EDIT:. Ich bin in einer Art und Weise interessiert ähnlich wie gcc, die "fragen Sie den aktuellen Compiler" ist

Danke

War es hilfreich?

Lösung

Diese Methode funktioniert Menge, um den Compiler für die Liste der vordefinierten Makros zu fragen, aber es nutzt undokumentierte Funktionen und spiegelt nur eine unvollständige Liste. Ich schließe es hier der Vollständigkeit halber.

Die Microsoft C / C ++ Compiler ermöglicht eine alternative Compiler-Frontend aufgerufen werden unter Verwendung des / B1 und / Bx-Befehlszeilenoptionen für .c und CPP-Dateien sind. Die Befehlszeilenschnittstellenmodul CL.exe gibt eine Liste der Optionen auf den Ersatz-Compiler-Frontend über den MSC_CMD_FLAGS Umgebungsvariable. Diese Liste der Optionen umfasst -D Makro-Definitionen für einige der vordefinierten Makros.

Die folgenden trivialen Ersatz Compiler-Frontend druckt die Liste der Optionen an sie übergeben:

/* MyC1.c */

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char *p;

    if ((p = getenv("MSC_CMD_FLAGS")) != NULL)
        printf("MSC_CMD_FLAGS:\n%s\n", p);

    if ((p = getenv("MSC_IDE_FLAGS")) != NULL)
        printf("MSC_IDE_FLAGS:\n%s\n", p);

    return EXIT_FAILURE;
}

Compile dies eine ausführbare Datei namens, zum Beispiel „MyC1.exe“, sicherzustellen, dass es in der PATH sichtbar ist und CL.exe sagen, es als Compiler-Frontend aufrufen eine der folgenden Möglichkeiten verwenden:

cl /B1MyC1.exe AnyNameHere.c  
cl /BxMyC1.exe AnyNameHere.cpp  

Fügen Sie andere Befehlszeilenoptionen wie erforderlich, um zu sehen, welche Makros für diesen Satz von Optionen vordefiniert sind.

In der resultierenden Ausgabe Look für die -D-Optionen. Eine Beispielliste ist unten angegeben. In der aktuellen Ausgabe wird die Liste sein Leerzeichen getrennt, wobei jede Makrodefinition von -D voran und anderen Optionen auch vorhanden.

_MSC_EXTENSIONS  
_INTEGRAL_MAX_BITS=64  
_MSC_VER=1600  
_MSC_FULL_VER=160030319  
_MSC_BUILD=1  
_WIN32  
_M_IX86=600  
_M_IX86_FP=0  
_MT  

Diese Technik scheint die meisten Makros enthalten, die auf Kommandozeilen-Optionen ab, schließt aber jene, die immer so sind definiert als __FILE__ und __DATE __.

Andere Tipps

/P Präprozessor-Flag wird emittieren die aktuell aktiven Makros basierend auf den Projekterstellungseinstellungen. Ich bin nicht sicher, ob es genau das Äquivalent von gcc-Befehl Sie gezeigt haben. Die Ausgabe ist in .I Datei.

Versuchen Sie, die PREDEF Projekt . Sie halten eine Datenbank von vordefinierten Makros für viele Zielplattformen, Host-Plattformen und Compiler Toolketten.

Sie haben auch ein Skript, das versucht, alle vordefinierten Namen zu entdecken, ob dokumentiert oder nicht. Es funktioniert durch die strings Dienstprogramm über den Compiler ausgeführt wird, die Verarbeitung, dass für jedes Token plausible Kandidaten-Token, und versuchen Test Compilations zu bekommen. Nicht schnell, aber ziemlich gut an viele Makros zu entdecken.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top