Если вы просто запустите cpp (препроцессор C) для файла, вывод будет содержать директивы #line вида
#line 45 "silly-file-with-macros.h"
для компилятора, говорящего, откуда все пришло. Так что одним из способов является использование
cpp my-file.c | more
и найдите директиву #line
.
В зависимости от вашего компилятора, другой прием, который вы можете использовать, - переопределить макрос к чему-то другому, и компилятор выдаст предупреждение, подобное
test-eof.c:5:1: warning: "FRED" redefined
test-eof.c:3:1: warning: this is the location of the previous definition
(это из gcc), который должен сказать вам, где макрос был определен ранее. Но если подумать, как это, что вы уже не получаете это предупреждение?
Другая идея состоит в том, чтобы использовать makedepend
, чтобы получить список всех включенных файлов, а затем выполнить grep для получения #define
строк в них.