2009-07-27 4 views

Odpowiedz

16

Wstępnie zdefiniowane makra zależą od standardu i sposobu, w jaki kompilator je implementuje.

Dla GCC: http://gcc.gnu.org/onlinedocs/cpp/Predefined-Macros.html

dla Microsoft Visual Studio 8: http://msdn.microsoft.com/en-us/library/b0084kay(VS.80).aspx

Ta strona Wikipedii http://en.wikipedia.org/wiki/C_preprocessor#Compiler-specific_predefined_macros list jak zrzucić na niektóre z predefiniowanych makr

+7

Tylko po to, aby zapisać odpowiedź: gcc -dM -E -

0

Program może zdefiniować makro w jeden punkt , usuń później tę definicję, , a następnie podaj inną definicję . Zatem w różnych punktach w programie makro może mieć różne definicje, lub nie ma żadnej definicji.

+0

Ogólnie dotyczy makr, ale pytanie dotyczyło wstępnie zdefiniowanych makr. – CsTamas

+0

@CsTamas: czy mówisz, że nie możesz zmienić zdefiniowanych makr? –

+0

@Mitch Wheat: Nie, nie mówię tego. Ale pytanie było inne. – CsTamas

4

Prawdopodobnym źródłem wstępnie zdefiniowanych makr dla określonej kombinacji kompilatora i platformy jest Predef project w Sourceforge. Próbują oni zachować katalog wszystkich wstępnie zdefiniowanych makr we wszystkich kompilatorach C i C++ na wszystkich platformach. W praktyce obejmują one wiele platform dla GCC i kilka innych kompilatorów.

Osiągnęli to dzięki połączeniu starannego odczytu dokumentacji, a także skryptu powłoki, który określa, które makra są wstępnie zdefiniowane na własnej skórze: próbuje je. Rozumiem, że faktycznie próbuje każdego ciągu, jaki może znaleźć w wykonywalnym obrazie kompilatora i/lub preprocesora, aby sprawdzić, czy ma on predefiniowane znaczenie.

Będą szczęśliwie dodawać wszelkie informacje, których jeszcze nie mają do swojej bazy danych.