Come scoprire di cl.exe built-in macro
-
01-10-2019 - |
Domanda
Qualcuno sa come potrei scoprire quali sono incorporate / macro predefinite di cl.exe? Ad esempio per gcc la seguente riga di comando elencherà tutte le macro incorporate del compilatore
gcc -dM -E - </dev/null
EDIT:. Mi interessa in modo simile a quella di gcc che è "chiedere il compilatore vero e proprio"
Grazie
Soluzione
Questo metodo fa ammontare a chiedere il compilatore per l'elenco delle macro predefinite, ma utilizza le funzionalità non documentate e fornisce solo un elenco parziale. Includo qui per completezza.
Il Microsoft C / C ++ permette un compilatore front-end alternativa da richiamare utilizzando il / B1 e / linea di comando Bx comando per file .c cpp rispettivamente. Il modulo di interfaccia di riga di comando Cl.exe passa un elenco di opzioni per la sostituzione compilatore front-end tramite la variabile di ambiente MSC_CMD_FLAGS. Questo elenco di opzioni include -D definizioni macro per alcune delle macro predefinite.
la seguente sostituzione banale compilatore front-end stampa l'elenco delle opzioni passate ad esso:
/* 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;
}
Compila questo per un eseguibile chiamato, per esempio, "MyC1.exe", assicurarsi che sia visibile nel PATH e dire Cl.exe per invocarlo come il compilatore front-end utilizzando uno dei seguenti modi:
cl /B1MyC1.exe AnyNameHere.c
cl /BxMyC1.exe AnyNameHere.cpp
Includere altre opzioni della riga di comando come richiesto per vedere quali sono le macro predefiniti per quella serie di opzioni.
Nel sguardo output risultante per le opzioni -D. Un elenco esempio è dato seguito. In uscita effettiva lista sarà separato da spazi, con ogni definizione macro preceduto da -D, e altre opzioni presenti anche.
_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
Questa tecnica sembra includere la maggior parte delle macro che dipendono le opzioni della riga di comando, ma esclude quelli che sono sempre definite come __FILE__ e __DATE __.
Altri suggerimenti
bandiera /P
preprocessore emetterà le macro attualmente attivi in ??base alle impostazioni del progetto di build. Non sono sicuro se è esattamente l'equivalente di comando gcc che avete dimostrato. L'uscita è nel file di .I
.
Trova informazioni alla fonte!
http://msdn.microsoft .com / it-it / library / b0084kay% 28v = VS.90% 29.aspx
Prova il PREDEF progetto . Mantengono un database di macro predefinite per molte piattaforme di destinazione, piattaforme host e toolchain del compilatore.
Essi hanno anche uno script che i tentativi di scoprire tutti i nomi predefiniti sia documentato o meno. Funziona eseguendo l'utilità strings
sopra il compilatore, la lavorazione che per ottenere i token candidati plausibili, e cercando compilation di prova per ogni gettone. Non veloce, ma abbastanza bravo a scoprire un sacco di macro.