Иногда со сложной структурой заголовка это происходит, некоторый заголовок включен, но трудно сказать где от.
Есть ли некоторый инструмент (depedency средство просмотра?) или метод, как найти, "включение складывает" (который источник / который заголовок / который заголовок/...), включает один конкретный заголовочный файл?
Если заголовочный файл включен многократно, найдя, что первое включение достаточно, нахождение, что все включения являются приветственным бонусом.
Кто-то писал об этом, но я не могу найти этот ответ. Итак, в VS перейдите в свойства вашего проекта. Выберите Configuration Properties / C / C ++ / Advanced / Show Includes и установите «да».
затем скомпилируйте файл cpp. Это выглядит так: cpp файл:
#include <stdio.h>
int main()
{
return 0;
}
В окне вывода после компиляции вы увидите:
1>------ Build started: Project: stlport_project, Configuration: Release Win32 ------
1>Compiling...
1>stlport_project.cpp
1>Note: including file: D:\src\hrs_rt_059.00\HRS\modules\src\libs\src\external\stlport\5.1.7\stdio.h
1>Note: including file: D:\src\hrs_rt_059.00\HRS\modules\src\libs\src\external\stlport\5.1.7\stl/_prolog.h
1>Note: including file: D:\src\hrs_rt_059.00\HRS\modules\src\libs\src\external\stlport\5.1.7\stl/config/features.h
и так далее
РЕДАКТИРОВАТЬ: ссылка на тот же вопрос Отображение иерархии #include для файла C ++ в Visual Studio
Искомый заголовок может быть не включен непосредственно в исходный файл. Вам необходимо "препроцессировать_только" код. Это можно сделать в g++, используя опцию -E; я недостаточно хорошо знаком с визуальным C, чтобы знать, какова точная спецификация, но если вы посмотрите в справке для 'preprocess', вы можете найти что-нибудь.
Несколько халтурный подход (но он должен работать на любой платформе/инструментарии, не требуя отдельного анализатора зависимостей) - просто добавить #error
в начало включаемого заголовка - тогда вы получите ошибку компиляции от первого .cpp
файла, который включает его.
Непосредственно в Visual Studio я нашел параметр под названием / showIncludes - вывод является только текстовым, но с отступом, который упрощает его чтение:
Note: including file: /*..path.anonymized..*/\TCMalloc\windows\config.h
Note: including file: /*..path.anonymized..*/\memalloc\tcmalloc\windows/port.h
Note: including file: C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\windows.h
Note: including file: C:\Program Files\Microsoft Visual Studio 8\VC\include\excpt.h
Note: including file: C:\Program Files\Microsoft Visual Studio 8\VC\include\crtdefs.h
Note: including file: C:\Program Files\Microsoft Visual Studio 8\VC\include\sal.h
Note: including file: C:\Program Files\Microsoft Visual Studio 8\VC\include\vadefs.h
Note: including file: C:\Program Files\Microsoft Visual Studio 8\VC\include\stdarg.h
Note: including file: C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\windef.h
Note: including file: C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h
Note: including file: C:\Program Files\Microsoft Visual Studio 8\VC\include\ctype.h
Note: including file: C:\Program Files\Microsoft Visual Studio 8\VC\include\crtdefs.h
Существует также надстройка VS под названием Include Manager , которая, кажется, обеспечивает необходимую функциональность в очень приятной визуальной форме.