您是否应该在定义函数的源文件中包含函数声明的标题#include?
这两种方法我都试过了,这两种方法似乎都行得通。我想知道哪种方式更好,或者一种方式是否会在不同的编译器中导致错误。
//header.h
#ifndef HEADER_H
#define HEADER_H
int squareVal (int);
#endif
//squareVal.cpp
//should I #include "header.h" here as well?
int squareVal (int val){
return (val*val);
}
//main.cpp
#include"header.h"
using namespace std;
int main(){
cout << squareVal(2) << endl;
}
这两种方法似乎都有效。根据我的测试和研究,无论文件中是否包含头文件,链接器似乎都能够找到squareVal.cpp。
发布于 2019-06-10 01:42:36
这是否有区别,取决于标题的内容。
在这种特定情况下,因为函数定义不需要以前的函数声明,所以squareVal.cpp
中的#include
不是(也永远不会)必需的。
但是,想象一下,如果头文件中包含的不仅仅是函数声明?如果它定义了函数所需的一些类型呢?如果它定义了函数定义所需的一些常量呢?那么你就需要一个#include
了。
不管怎样,这都被认为是#include
的良好实践,因为这样您就不需要考虑这一点,而且这样做实际上是免费的。
发布于 2019-06-10 01:25:30
使用#include
指令。将它放在顶部,放在任何其他#include
指令的前面。这样,如果头文件中有错误,编译器将更有可能发现它。特别是,如果声明函数的方式与定义函数的方式不同,编译器会注意到这一点。如果不拉入标头,使用该标头的转换单元将看到与已定义签名不同的签名,并且在尝试链接时会出现错误。当你及早发现问题时,事情就容易多了。
发布于 2019-06-10 00:49:29
编译器只需将头文件中的整个代码放在您插入#include "header.h"
的位置。所以在这个例子中,声明在函数的定义之前,它没有做任何坏事。
https://stackoverflow.com/questions/56516343
复制相似问题