有没有办法找出C / C ++源文件中包含的所有冗余头文件?
答案 0 :(得分:5)
请注意冗余包含在这里可能是件好事,因为它提供了头文件的自包含。即如果B包括A,C包括B和A:
headera.h
headerb.h
#include "headera.h"
headerc.h
#include "headerb.h"
#include "headera.h"
你可以说A中包含A是多余的,因为它已经由B的包含提供了。但实际上它使C独立于B的内部结构。删除它会使C 依赖在B上包含A。
答案 1 :(得分:2)
我使用doxygen(与graphviz一起)来获取包含图。那么“冗余”包括传递弧,即在较长路径上引入捷径的弧。
答案 2 :(得分:1)
这是一个复杂的问题。它可以解释为两种方式之一:
1可能不是必需的。包括只为编译器提供信息,它们不应该在其中分配。即使他们这样做而您没有这样做,编译器也会将其剥离。如果你真的想要这样做,你就可以开始删除包括你不认为你需要,直到你得到“隐含声明......”错误。
对于2,你通常不必担心。使用唯一的#def即:
是很常见的做法#ifndef __MY_LIB_H
#define __MY_LIB_H
...
#endif
如果定义已经存在,这将导致库名称被忽略。
如果您控制所有或大部分库,则可以将#ifndef
更改为:
#ifdef __MY_LIB_H
#error "Lib included recursively"
#else
...
#endif
答案 3 :(得分:0)
您还可以使用#ifdef在程序中检查它。为此,您的标题需要有一些不同的变量。如果它存在其定义的..