您的位置:首页 > 运维架构 > Linux

同一段C++代码在win下和linux下同时编译时产生的头文件包含问题及解决

2017-04-28 09:16 483 查看
最近遇到一些包含头文件的问题。如下:

同一段C++代码,在win下用vs可以编译通过,但是在linux下就会产生头文件包含错误。之前一直没有对include进行深入研究,下面我们由这个问题出发来深入了解一下include以及解决办法。

首先明确两种include方法:

#include< file >编译程序会到系统目录中找文件~

#include”file” 编译程序会先从当前目录中找文件~

在vc下,系统目录的设置如下:



也就是说如果使用尖括号include,我们会优先从这些目录中去找头文件~

        相对来说在linux下设置就比较简单了,那就是通过-I参数。有兴趣的可以看一下我们工程中的makefile文件是怎么使用的。

而通常我们会触发编译问题的用法就是双引号的include了,请注意,双引号的include会先从当前目录中查询,如果查询不到,还是会从系统目录中去查找文件。

        这里有个问题:

 当前目录下还有一个子目录sub,
sub里面有两个文件hdr.h和1.c,1.c中#include
"hdr.h",那么在当前目录编译sub/1.c,
它应该包含哪一个hdr.h?

答案是sub/hdr.h,因为1.c是在sub目录中~~~~

        所以说到这里,我们再回头看一下最开始的问题,如何才能确保在win下和linux能同时编译过,保证include没有问题。

1.最好确保win下和linux下的目录结构统一,如果目录不统一的话,我们用#include""就会产生在某个平台下头文件找不到的情况

2.如果目录确实不统一,我们需要保证win下附加包含目录和linux下-I指定的参数要相同。为什么?因为当#include""查找不到当前头文件位置时会到系统目录中去寻找,如果win下指定了一个系统目录但是linux下没有指定,那么linux就会在编译时产生问题

3.由问题2我引申出一个想法就是,我们尽量用相对路径去代替绝对路径,这样就能减少问题的产生。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ include
相关文章推荐