我曾经在将一些在Mac OS X上编写的C++代码移植到Linux系统或者尝试使用较旧版本的gcc/g++编译代码时遇到了麻烦:
似乎一些(旧的?)版本的gcc/g++会自动为您包含一些头文件。
例如,使用printf
的代码应该需要#include <stdio.h>
。而使用memcpy
的代码应该需要#include <string.h>
。但是,根据我使用的gcc版本不同,它偶尔会自动包含这些内容。
当我忘记包含某些内容,然后从未收到错误直到我去在另一个系统上编译代码时,它会造成混乱。此时,需要在整个项目中运行并修复包含问题。
有其他人遇到过这种情况吗?是否有一种方法可以强制gcc自动包含或不自动包含?或者,是否有一种方法可以知道它正在自动包含什么?
-Wall
,如果可能的话也要加上-pedantic
——这样你就不会依赖于隐式整型、未声明的原型等东西了。 - Paul R