In gcc
, come è possibile verificare quali definizioni del preprocessore C sono presenti durante la compilazione di un programma C, in particolare quali definizioni macro standard o specifiche della piattaforma sono definite?Quali macro del preprocessore C sono già state definite in gcc?
risposta
Le macro predefinite dipendono dallo standard e dal modo in cui il compilatore lo implementa.
Per GCC: http://gcc.gnu.org/onlinedocs/cpp/Predefined-Macros.html
Per Microsoft Visual Studio 8: http://msdn.microsoft.com/en-us/library/b0084kay(VS.80).aspx
Questa pagina di Wikipedia http://en.wikipedia.org/wiki/C_preprocessor#Compiler-specific_predefined_macros liste come discarica ad alcune delle macro predefinite
Solo per registrare la risposta: gcc -dM -E - dev/null –
Un programma può definire una macro a un punto , rimuovere la definizione successiva, e successivamente fornire una diversa definizione . Pertanto, a punti diversi del programma, una macro potrebbe avere definizioni diverse, o non avere alcuna definizione.
Una probabile origine dei macro predefiniti per una combinazione specifica di compilatore e piattaforma è Predef project in Sourceforge. Stanno tentando di mantenere un catalogo di tutte le macro predefinite in tutti i compilatori C e C++ su tutte le piattaforme. In pratica, hanno una copertura di un buon numero di piattaforme per GCC e un'infarinatura di altri compilatori.
Hanno ottenuto questo risultato grazie alla combinazione di un'attenta lettura della documentazione e di uno script di shell che individua le macro predefinite nel modo più difficile: le prova. La mia comprensione è che tenta effettivamente ogni stringa che può trovare nell'immagine eseguibile del compilatore e/o del preprocessore per vedere se ha un significato predefinito.
Essi aggiungeranno volentieri tutte le informazioni che non hanno ancora nel loro database.
In gcc, fare 'gcc -dM -E - dev/null'. C'è un interruttore simile per MSVC ma non riesco a ricordarlo. –