C++中include其他头文件时何时应放在.h文件中,何时应放在.cpp文件中?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++中include其他头文件时何时应放在.h文件中,何时应放在.cpp文件中?相关的知识,希望对你有一定的参考价值。

在后台看代码时有时候不清楚a.cpp源代码中一个函数的用法,但是在a.cpp最前面include的头文件中却找不到该函数的定义,还需要到a.h代码的前面去查看相关文件,感觉这样看代码效率不高。
在a.h与a.cpp的前面都能include很多头文件,要养成良好的编程习惯和让代码具有较高的可读性,这些头文件include在a.h还是a.cpp中有什么规律吗?
我目前只是觉得a.h中如果include太多头文件可能会对编译效率有点影响。哪位高手有真知灼见,望赐教。

.h是 头文件
.cpp 是源文件

c++中。通常 将
struct class #define typedef function 等的定义放到头文件中
而将 成员声明 和 function实现 类实现 放入cpp中

h和cpp中同时可以使用include包含头文件,但是我们通常 有这个习惯

也就是尽量不要在。h中include非必须的其他。h

也就是说
当.h中的 定义 内容 用到了T* t那么我们 没有必要 #include "t.h"之需要在。h中 class T;声明一下 即可。
当 。h中用到了T t;也就是 非指针时,此时可以在.h中 include "t.h"

以上均是书写规范问题。当然所有的.h都include进来也不会编译错。

至于为什么有这个书写规范 就需要 你再仔细理解 一下c++接口设计了。也就是说 如果你的。h作为一个模块给别人使用时 没有必要 把 没有用的。h同时提供给别人。

至于编译速度的话 ide有优化的。你没有用到的东西他不会编译进去的。
参考技术A 查看函数定义 直接用右键菜单,转到定义不就可以了?

大型工程个人基本都这样看,一般习惯包含在。h中。

还有一点,VS都有如下定义
#ifndef _XX_

.h头文件,类声明

#define _XX_
#endif
这样保证了一个.H文件只被编译一次
参考技术B 一般为了实现信息的隐藏,通常会把整个类封装到一个头文件中。而在主函数main所在文件中就在开始处包含进来这个头文件。include那里头文件添加与否只是与是否使用相应库或类的函数和变量有关。

参考资料:如果您的回答是从其他地方引用,请表明出处

参考技术C 我觉得在.h头文件中写入要用到的类的声明,在.cpp文件中包含头文件

linux下编写c++,include的那些头文件在啥地方

在linux下有众多的文件,而编写c++时经常要include一些头文件,那这些头文件是放在哪个文件夹下的 麻烦说的详细点,包括那些标准c++的头文件,以及非标准的 还有如果我有一些自己编好的,或是下载到的头文件,想以后编写时能直接include,那我这些文件应... 想以后编写时能直接include,包括那些标准c++的头文件,或是下载到的头文件,而编写c++时经常要include一些头文件在linux下有众多的文件,那这些头文件是放在哪个文件夹下的 麻烦说的详细点,以及非标准的 还有如果我有一些自己编好的 展开 usr//这些我也知道的,但是这个文件夹下还是有很多的文件和文件夹的;include/

参考技术A C/C++程序在linux下被编译和连接时,GCC/G++会查找系统默认的include和link的路径,以及自己在编译命令中指定的路径。自己指定的路径就不说了,这里说明一下系统自动搜索的路径。
【1】include头文件路径
除了默认的/usr/include,
/usr/local/include等include路径外,还可以通过设置环境变量来添加系统include的路径:
#
C
export
C_INCLUDE_PATH=XXXX:$C_INCLUDE_PATH
#
CPP
export
CPLUS_INCLUDE_PATH=XXX:$CPLUS_INCLUDE_PATH
以上修改可以直接命令行输入(一次性),可以在/etc/profile中完成(对所有用户生效),也可以在用户home目录下的.bashrc或.bash_profile中添加(针对某个用户生效),修改完后重新登录即生效。
【2】link链接库文件路径
链接库文件在连接(静态库和共享库)和运行(仅限于使用共享库的程序)时被使用,其搜索路径是在系统中进行设置的(也可以在编译命令中通过
-l
-L
来指定,这里讲的是使用系统默认搜索路径)。
一般
Linux
系统把
/lib
/usr/lib
/usr/local/lib
作为默认的库搜索路径,所以使用这几个目录中的链接库文件可直接被搜索到(不需要专门指定链接库路径)。对于默认搜索路径之外的库,则需要将其所在路径添加到gcc/g++的搜索路径之中。
链接库文件的搜索路径指定有两种方式:1)修改/etc/so.ld.conf
2)修改环境变量,在其中添加自己的路径
1)在环境变量中添加
动态链接库搜索路径:
export
LD_LIBRARY_PATH=XXX:$LD_LIBRARY_PATH
静态链接库搜索路径:
export
LIBRARY_PATH=XXX:$LIBRARY_PATH
以上修改可以直接命令行输入(一次性),可以在/etc/profile中完成(对所有用户生效),也可以在用户home目录下的.bashrc或.bash_profile中添加(针对某个用户生效),修改完后重新登录即生效。
2)在/etc/ld.so.conf
中添加指定的链接库搜索路径(需要root权限),然后运行
/sbin/ldconfig,以达到刷新
/etc/ld.so.cache的效果。
以上两种方式均可以达到指定链接库搜索路径的效果。

以上是关于C++中include其他头文件时何时应放在.h文件中,何时应放在.cpp文件中?的主要内容,如果未能解决你的问题,请参考以下文章

linux下编写c++,include的那些头文件在啥地方

C++什么是头文件?.c文件和.h文件

C++创建一个结构体应该放在.cpp文件中吗?然后调用的时候只要包含这个.cpp文件?

如何组织 C++ 项目 [关闭]

C++ STL 包含哪些头文件?

求STL(C++)模板库的set.h头文件