pragma once 是一条预处理指令,它的作用是防止编译器在编译的过程中将它所在的头文件打开并嵌入到源代码中。通常,将在项目的多个文件中嵌入类的定义,因为每个引用特定类名的文件都需要访问类的定义。有些情况下,头文件本身可能包括嵌入其它头文件的 #include 指令,这将导致某个头文件的内容有可能在源代码中多次出现---编译过程中出现某个类的多次定义是不允许的,这种情况被标志为错误。在每个头文件的开头部分都放入 #pragma once 指令,可以确保不出现这种错误。
注意,#pragma once 是 Microsoft 特有的指令,在其它开发环境中可能不支持。如果你的代码需要考虑移植性,那么可以在头文件中使用下面指令形式以达到相同的效果:
[C++] 纯文本查看 复制代码
//一个头文件
#ifndef BOX_H
#define BOX_H
// 代码
#endif
上面的 ifndef , define , endif 是任何 ISO/ANSI C++ 编译器都支持的指令。只要没有定义符号 BOX_H ,编译器就会嵌入 #ifndef 指令后面一直到 #endif 指令之前的所有代码行。 #ifndef 后面那一行定义了符号 BOX_H ,从而确保了该头文件中的代码不能被第二次嵌入。因此,这种方法与在头文件中开始处放置 #pragma once 指令具有相同的效果。显然,#pragma once 指令会显得更加简单与简洁,因此在 Visual C++ 环境中开发的代码,最好使用该指令。有时候,#ifndef 和 #endif 组合也可以写成如下形式:#if !defined BOX_H
#define BOX_H
// 代码
#endif |