W dokumencie gcc
, w jaki sposób mogę sprawdzić, jakie definicje preprocesora są w trakcie kompilacji programu C, w szczególności jakie definicje makr standardowych lub specyficzne dla platformy są zdefiniowane?Jakie makra preprocesora C zostały już zdefiniowane w gcc?
Odpowiedz
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
Tylko po to, aby zapisać odpowiedź: gcc -dM -E - dev/null –
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.
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.
W gcc, wykonaj 'gcc -dM -E - dev/null'. Jest podobny przełącznik dla MSVC, ale nie pamiętam go. –