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

È stato utile?

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.

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top