过去,当我尝试将一些在Mac OS X上编写的C ++代码移植到Linux系统上,或尝试使用较新版本的gcc / g ++旧代版本编写代码时,我遇到了麻烦:
似乎gcc / g ++的某些(较旧的?)版本会自动包含一些头文件。
例如,使用printf
的代码应该需要#include <stdio.h>
。使用memcpy
的代码应该需要#include <string.h>
。但是根据我正在使用的gcc版本,它偶尔会包含这些内容。
当我忘记包含某些内容然后永远不会出错时,它会造成严重破坏,直到我在另一个系统上编译代码为止。那时,它是一个在整个项目中运行并修复包含的游戏。
有没有其他人遇到这个?有没有办法强制gcc自动包含或不自动包含?或者,有没有办法知道什么它自动包含?
答案 0 :(得分:5)
- 包含文件 处理文件好像#include“file”出现在主源文件的第一行。但是,搜索文件的第一个目录是预处理器的工作目录,而不是包含主源文件的目录。如果在那里找不到,则在#include“...”搜索链的其余部分中搜索正常。 如果给出了多个-include选项,则文件将按照它们在命令行中显示的顺序包含在内。
答案 1 :(得分:3)
你确定不是其他标题拉不上那些,而在其他平台上没有这样做吗?
答案 2 :(得分:0)
在不同系统上进行编译时,您可能会遇到不同的问题而不仅仅是包含问题。 我建议投资一个连续构建系统,该系统将在每次更新代码后在所有操作系统上进行编译,因此您可以快速了解任何可移植性问题。
您还可以将所有常见的系统头文件放在您要编写的特定头文件中,并系统地将其包含在所有文件中。