Показать иерархию #include в C++Builder
У меня возникли проблемы с чужим кодом, который выглядит как заголовочные файлы, включенные не по порядку. (Например, я получаю ошибки переопределения, некоторые из которых даже находятся в одном и том же файле!) Было бы полезно увидеть дерево #include, которое использует компилятор C++Builder, аналогично флагу -showInclude в Visual Studio. Есть ли такая функциональность? если так, как я могу получить к нему доступ? Я специально использую C++Builder 2007.
2 ответа
К сожалению, нет никаких опций компилятора Borland C для отображения иерархии #include
д файлы. См. Документацию Embarcadero по BCC32 CLI.
Однако альтернатива (предоставленная, но не такая чистая) заключается в использовании препроцессора Borland C Compiler, например
CPP32 -Sr source.cpp # outputs source.i with comments and indentation retained
Это обычно происходит, если вы включаете несколько раз файлы, которые содержат глобальные константы, переменные и иногда даже #defines
, Это очень распространено для приложений MDI, где мастер Form
содержит включение ребенка Form
и некоторые из них используют одни и те же библиотеки...
Иерархия включения не поможет, если вы не планируете редактировать все исходные файлы. #include
порядок, который может привести к проблемам позже (особенно совместимость)...
Чтобы исправить это, вы должны инкапсулировать все такие файлы с
#ifndef _file_name_h
#define _file_name_h
// here your source and includes
#endif
заявления. Как в этом примере:
Это предотвратит множественные определения и компиляции на уровне предкомпилятора, поскольку исходный код будет обрабатываться только в первый раз (пока #define _file_name_h
до сих пор не определено).