Как узнать, из какого именно файла происходит символ - PullRequest
0 голосов
/ 13 июля 2020

У меня вопрос относительно включаемых файлов.

Предположим, вы используете определение из заголовков windows. Конечно, вы можете знать, какой именно заголовок определяет макрос. Но вопрос в том, можем ли мы получить цепочку include и узнать, какой путь вызывает включение макроса?

Например, у меня есть следующая структура:

windows.h // a windows header defines a macro

header1.h <- windows.h // a <- b means a includes b
header2.h <- windows.h
header3.h <- windoes.h
header4.h <- header1.h, header2.h
header5.h <- header1.h, header4.h, header3.h

Как и следовало ожидать, реальный пример может быть очень сложным с тонами определений макросов и ifdef s.

Теперь в нашем example.cpp мы #include "header4.h" или #include "header5.h" или оба вместе, и мы используем макрос в windows.h в нашем коде. Как узнать, что такое включаемая цепочка?

Например, для этого примера это может быть header4.h - header1.h - windows.h

Ответы [ 2 ]

1 голос
/ 13 июля 2020

С g cc 6.3.0 вы можете использовать #pragma трюк

$ cat so62875940.c
#include <stdio.h>
#pragma message "so62875940.c"

int main(void) {
    puts("foo");
    return 0;
}
$ gcc so62875940.c
so62875940.c:2:9: note: #pragma message: so62875940.c
 #pragma message "so62875940.c"
         ^~~~~~~

Затем следуйте порядку включения ...

0 голосов
/ 14 июля 2020

Думаю, эта ссылка может вам помочь. Вы можете выбрать Architecture->Generate Graph of Include Files/Generate Code Map for solution without Building.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...