在#ifndef中包装#includes - 添加任何值?

Sim*_*rim 4 c++ include c-preprocessor

我继承了C/C++代码库,并且在许多.cpp文件中,#include指令包含在#ifndef中,头文件是内部单包含#define.

例如

#ifndef _INC_WINDOWS
#include <windows.h>
#endif
Run Code Online (Sandbox Code Playgroud)

和windows.h看起来像

#ifndef _INC_WINDOWS
#define _INC_WINDOWS
...header file stuff....
#endif // _INC_WINDOWS
Run Code Online (Sandbox Code Playgroud)

我假设这样做是为了加快代码的编译/预处理.

我认为它很丑陋并且过早优化,但由于项目从清洁开始有5分钟的构建时间,我不想让事情变得更糟.

那么这种做法是否会增加任何价值或加快速度?清理它们可以吗?

更新:编译器是MSVC(VS2005),平台是Win32/WinCE

Ste*_*sop 8

值得知道的是,某些实现具有#pragma once和/或头部包含保护检测优化,并且在两种情况下预处理器将自动跳过打开,读取或处理之前包含的头文件.

所以在包括MSVC和GCC在内的那些编译器上,这种"优化"是没有意义的,并且应该是头文件负责处理多个包含.但是,这可能是#include效率非常低的编译器的优化.代码在病理上是可移植的,并且<windows.h>不是指着名的Win32头文件,而是指某个用户定义的同名头文件?

头文件也可能没有多包含保护,并且这种检查实际上是必不可少的.在这种情况下,我建议更改标题.标题的整个点可以替代关于该地点的复制和粘贴代码:它不应该包含三行来包含标题.

编辑:

既然你说你只关心MSVC,我会:

  • 做一个大规模编辑,为构建时间只是为了确保以前的程序员不知道我不知道的事情.#pragma once如果它有帮助,也许添加.使用预编译的头文件,如果这一切真的减慢了速度.
  • 忽略它,但不要将防护用于新文件或#include添加到旧文件的新文件.

取决于我是否有更重要的事情需要担心.这是一个经典的周五下午的工作,我不会花费潜在的生产时间;-)