在c ++

时间:2016-10-21 15:38:01

标签: c++ header include

我有这样的事情:

//main.cpp
#include <add.h>

cin >> a;
cin >> b;
cout << add(a,b);


//add.h
#ifndef add_h
#define add_h

int add(int a, int b);

#endif 


//add.cpp
int add(int a, int b){
    return a+b;
}

我是否应该在add.cpp中包含add.h,或者我只能将它包含在main.cpp中?  我问,因为我在某个地方看到了,我很好奇哪条路更好。

2 个答案:

答案 0 :(得分:5)

您可以加入,但这里不是强制性的。

通常最好将所有声明都包含在定义它的对象中(它使您可以按任何顺序定义函数)。

这是一个例子: 如果你有add和combined_add(函数调用add()在中间) 你被迫在combined_add之前定义add。 如果在文件顶部有包含标题,则可以在添加之前定义combined_add,而不会出现编译错误。

答案 1 :(得分:0)

  

我是否应该在add.cpp中包含add.h,或者我只能在其中包含它   main.cpp中?

在这种情况下,你不必没有。

int add(int a, int b);

add声明的定义变得重要的时刻正处于关联阶段。链接器检查所有生成的目标文件(中间编译的源文件(在本例中为main.o和add.o),如果其中一个目标文件包含add的定义(因此实现),则链接器为满意并且使用了该定义.cpp文件不必知道头文件中的声明,因为定义本身已经是声明。

为了更清楚,只要您有声明,并且您知道链接器将找到该声明的定义,您甚至不需要头文件:

Main.cpp的

extern int add(int a, int b);

cin >> a;
cin >> b;
cout << add(a,b);

Add.cpp

int add(int a, int b){
    return a+b;
}