首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >这两种方法中哪一种是实现报头的正确方法?

这两种方法中哪一种是实现报头的正确方法?
EN

Stack Overflow用户
提问于 2019-06-10 00:26:08
回答 3查看 63关注 0票数 1

您是否应该在定义函数的源文件中包含函数声明的标题#include?

这两种方法我都试过了,这两种方法似乎都行得通。我想知道哪种方式更好,或者一种方式是否会在不同的编译器中导致错误。

代码语言:javascript
复制
//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。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-06-10 01:42:36

这是否有区别,取决于标题的内容。

在这种特定情况下,因为函数定义不需要以前的函数声明,所以squareVal.cpp中的#include不是(也永远不会)必需的。

但是,想象一下,如果头文件中包含的不仅仅是函数声明?如果它定义了函数所需的一些类型呢?如果它定义了函数定义所需的一些常量呢?那么你就需要一个#include了。

不管怎样,这都被认为是#include的良好实践,因为这样您就不需要考虑这一点,而且这样做实际上是免费的。

票数 0
EN

Stack Overflow用户

发布于 2019-06-10 01:25:30

使用#include指令。将它放在顶部,放在任何其他#include指令的前面。这样,如果头文件中有错误,编译器将更有可能发现它。特别是,如果声明函数的方式与定义函数的方式不同,编译器会注意到这一点。如果不拉入标头,使用该标头的转换单元将看到与已定义签名不同的签名,并且在尝试链接时会出现错误。当你及早发现问题时,事情就容易多了。

票数 1
EN

Stack Overflow用户

发布于 2019-06-10 00:49:29

编译器只需将头文件中的整个代码放在您插入#include "header.h"的位置。所以在这个例子中,声明在函数的定义之前,它没有做任何坏事。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56516343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档