Ответ 1
gcc -E выведет предварительно обработанный источник в stdout.
В общем, у меня иногда есть цепочка вложенных макросов с несколькими условными элементами препроцессора в их определениях. Это может быть болезненным для отладки, поскольку трудно непосредственно увидеть фактический выполняемый код.
Некоторое время назад я смутно помню, как найти флаг компилятора (gcc) для их расширения, но мне не удалось заставить его работать на практике.
gcc -E выведет предварительно обработанный источник в stdout.
Для пользователей MSVC вы можете щелкнуть правой кнопкой мыши файл/проект, просмотреть настройки и изменить свойства файла для вывода предварительно обработанного источника (который обычно находится в каталоге obj).
Это может быть неприменимо в вашей ситуации, но макросы действительно затрудняют отладку и часто злоупотребляют и предотвращаются.
Можете ли вы заменить их встроенными функциями или иначе избавиться от них все вместе?
Вероятно, вам следует начать отходить от формы Макросы и начать использовать встроенные и шаблоны.
Макросы - это старый инструмент, иногда подходящий инструмент. В крайнем случае помните, что printf - ваш друг (и на самом деле printf не так уж плох, когда вы делаете многопоточность)
Отладить разборку с загруженными символами.
gcc -save-temps будет выписывать файл .i(или .ii для С++), который является выходом препроцессора C, прежде чем он будет передан компилятору. Это часто может быть полезным.
GCC и совместимые компиляторы используют параметр -E для вывода предварительно обработанного источника в стандартную версию.
gcc -E foo.cpp
Sun Studio также поддерживает этот флаг:
CC -E foo.cpp
Но еще лучше - xdumpmacros. Вы можете найти дополнительную информацию в документах Sun.