【问题标题】:Quick question regarding Conditional Compilation (ifndef)关于条件编译 (ifndef) 的快速问题
【发布时间】:2011-02-20 00:24:24
【问题描述】:
这很可能是一个非常愚蠢的问题,但我需要确定。我在头文件中得到了一个类声明,例如。
#ifndef file_H
#define file_H
class ex{
private:
public:
};
#endif
并且我被要求在同一个文件中编写方法定义,我已经这样做了,我的问题是“#endif”是在类声明之后保持在它的位置还是在我的文件在类方法定义之后?。
【问题讨论】:
标签:
c++
gcc
compiler-construction
header-files
include-guards
【解决方案1】:
在文件末尾。
这种#ifndef 模式的形式的目标是防止出现相同的声明或定义在编译单元中出现两次的情况。
这样做是因为一个 C 文件可能包含多个 H 文件,这些文件在链上的某处又可能包含同一个文件。如果您只是在没有这些的情况下运行预处理器,您将拥有 H 文件的多个副本。这样,您有多个副本,但预处理器会在第一次遇到后忽略所有内容。
由于您不应该多次定义任何内容,因此如果您必须将方法定义放在头文件中,请将它们放在#endif 中。