是否应在定义函数的源文件中包含#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。
答案 0 :(得分:1)
使用#include
指令。将其放在所有其他#include
指令之前。这样,如果头文件中有错误,编译器将更有可能找到它。特别是,如果您以不同于定义方式的方式声明函数,则编译器会注意到。如果不拉入标题,则使用该标题的翻译单元将看到与已定义的签名不同的签名,并且在尝试链接时会出错。尽早发现问题会容易得多。
答案 1 :(得分:0)
编译器只是将整个代码从标头插入您插入#include "header.h"
的位置。因此,在此示例中,声明在函数定义之前,并且没有任何坏处。
答案 2 :(得分:0)
是否有所不同,取决于标题的内容。
在这种特定情况下,由于函数定义不需要先前的函数声明,因此#include
中的squareVal.cpp
并不是(而且永远不会)是必需的。
但是,想像一下标头包含的内容是否大于函数声明?如果它定义了函数所需的某些类型怎么办?如果它定义了函数定义所需的一些常量怎么办?然后,您需要一个#include
。
无论如何#include
被认为是一种好习惯,因为那样一来您就无需考虑这一点,并且这样做实际上是免费的。