2009-07-27 15 views

risposta

16

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

+7

Solo per registrare la risposta: gcc -dM -E -

0

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.

+0

Generalmente vero per macro, ma la domanda riguardava macro predefinite – CsTamas

+0

@CsTamas: stai dicendo che non puoi annullare la definizione di macro predefinite? –

+0

@Mitch Wheat: No, non lo dico. Ma la domanda era diversa. – CsTamas

4

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.