多余包含必要的警卫?

Set*_*eth 4 c++ include-guards include c++builder-2009

Codegear RAD Studio 2009中是否需要"冗余包括警卫"?编译器是否足够聪明,可以自行处理?

例如,我可能在foo.h中有以下'include guard':

#ifndef fooH
#define fooH
// ... declaration here
#endif
Run Code Online (Sandbox Code Playgroud)

以及use_foo.h中的以下'冗余包含保护':

#ifndef fooH
    #include "foo.h"
#endif
Run Code Online (Sandbox Code Playgroud)

此外,如果编译器不够智能,如果它们包含在源文件中,那么"冗余包括警卫"是必需的.例如use_foo.cpp.?

小智 5

您标记为"冗余包含保护"的代码部分不是必需的,但它是可能的优化.

在C++ Builder的情况下,有检测标题保护的逻辑,因此它不是必需的.

在一般情况下,无论如何,预处理过程通常非常快,因此无论如何这种优化都不太可能给你带来太大的影响.