我有一个看似相对简单的问题,但我一直无法理解它。
如果这是一个简单的问题,我深表歉意,但像许多简单的问题一样,我似乎无法在任何地方找到可靠的解释。
使用以下代码:
/*foo.c*/
#include "bar.h"
int main() {
return(my_function(1,2));
}
/*bar.h*/
int my_function(int,int);
/*bar.c*/
#include "bar.h" /*is this necessary!?*/
int my_function(int x, int y) {
return(x+y);
}
简单来说,二次包含有必要吗?我不明白为什么我总是看到两个源文件中都包含标题。当然,如果通过包含“bar.h”在“foo.c”中声明该函数,则不需要在另一个链接的源文件(尤其是实际定义它的文件)中再次声明???一位 friend 试图向我解释说,这对函数来说并不重要,但对结构来说却很重要,但我仍然无法理解!帮助!
是否只是为了清楚起见,以便程序员可以看到外部正在使用哪些功能?
我就是不明白!
谢谢!
最佳答案
在这种特殊情况下,由于您描述的原因,这是不必要的。在您拥有一组可能相互依赖的更复杂功能的情况下,它可能很有用。如果您在 .cpp
文件的顶部包含 header ,则您已经有效地转发声明了每个函数,因此您不必担心确保您的函数定义按特定顺序排列.
我还发现它清楚地表明这些 函数定义对应于那些 声明。这使读者更容易发现翻译单元如何相互依赖。当然,文件名可能就足够了,但是一些更复杂的项目在.cpp
文件和.h
文件之间并没有一对一的关系。有时 header 被分成多个部分,或者许多实现文件将在单个 header 中声明其外部函数(对于大型模块很常见)。
真的,所有的内含物都是不必要的。毕竟,您总是可以在所有需要它们的文件中复制声明(或定义,在类的情况下)。我们使用预处理器来简化这个任务并减少冗余代码量。坚持始终包含相应 header 的模式更容易,因为它始终有效,而不是每次编辑文件时都必须检查每个文件并确定是否需要包含。
关于c++ - C++ 中包含双 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27128364/