В gcc
, как я могу проверить, какие определения препроцессора C используются во время компиляции программы C, в частности, какие стандартные или специфичные для платформы определения макросов определены?
Какие макросы препроцессора C уже определены в gcc?
Ответы (3)
Предопределенные макросы зависят от стандарта и способа его реализации компилятором.
Для GCC: http://gcc.gnu.org/onlinedocs/cpp/Predefined-Macros.html
Для Microsoft Visual Studio 8: http://msdn.microsoft.com/en-us/library/b0084kay(VS.80).aspx
Эта страница Википедии http://en.wikipedia.org/wiki/C_preprocessor#Compiler-specific_predefined_macros перечисляет, как сделать дамп в некоторых предопределенных макросах
Вероятным источником предопределенных макросов для конкретной комбинации компилятора и платформы является проект Predef в Sourceforge. Они пытаются поддерживать каталог всех предопределенных макросов во всех компиляторах C и C++ на всех платформах. На практике они охватывают значительное количество платформ для GCC и небольшое количество других компиляторов.
Они достигли этого за счет комбинации внимательного чтения документации, а также сценария оболочки, который выясняет, какие макросы предопределены трудным путем: он пробует их. Насколько я понимаю, он фактически пробует каждую строку, которую может найти в исполняемом образе компилятора и/или препроцессора, чтобы увидеть, имеет ли она предопределенное значение.
Они с радостью добавят любую информацию, которой у них еще нет, в свою базу данных.
Программа может определить макрос в какой-то момент, удалить это определение позже, а затем предоставить другое определение. Таким образом, в разных точках программы макрос может иметь разные определения или вообще не иметь определения.
gcc -dM -E - < /dev/null
. Для MSVC есть аналогичный переключатель, но я его не помню. - person Joe D   schedule 12.08.2010