头文件保护符和#pragma once
2011-10-06 17:06
951 查看
会为了防止头文件被包含多次,都会在每个头文件中写与如下类似的代码:
// a.h
#ifndef A_H
#define A_H
//内容
#endif
这样,你如果在两个地方都有这个语句:
#include "a.h"
那么这个头文件将被保证只被加入一次,你知道为什么会只加入一次吗?因为A_H这个宏定义哈。
然后这样其实也可以的:
如:
//a.h
什么也不加..
调用时:
第一次调用
#ifndef A_H
#define A_H
#include "a.h"
#endif
第二次调用:
#ifndef A_H
#define A_H
#include "a.h"
#endif
前者叫内部保护,后者叫外部保护。
由于外部保护经常可能会忘记写,容易被误用,所以我们推荐使用内部保护。
微软提供了一个指令使你可以更方便的保护:
#pragma once//优点:方便,缺点:无可移植性
pragma once是告诉编译器在编译阶段只被编译器包含一次,是否有效与具体的编译有关,在跨平台时不应该使用。而头文件保护符是与语言相关的,推荐跨平台时使用。
#if !define ...
#define ...
#endif
编译器每次读到#if !define 时,如果已经定义过了则跳过,但还是要搜索整个文件,找到#endif 时退出,此时无疑增加了编译时间。而加上#pragma once一句,则可以让编译器立即退出,减少了编译的时间。
综上,一般用法为:
|
相关文章推荐
- 头文件保护 #pragma once与#ifndef 的区别
- 头文件保护符和#pragma once
- 头文件保护符和#pragma once
- 头文件中 #pragma once 与 #ifnde f的区别
- #pragma once 与 #ifndef 一个利用文件检查,一个利用宏检查
- 保证头文件只被编译一次的方法#pragma once和#ifndef
- C++ 防止头文件被重复包含(#pragma once 与 #ifndef 的区别)
- #pragma once与#ifndef两种防止头文件二次编译的区别
- #pragma once&&#ifndef解释:头文件只被编译一次
- c++ 避免头文件重复引用 (pragma once与 #ifndef的区别)【转】
- 防止头文件被重复定义#pragma once
- [C++]关于头文件中的防卫式声明(#ifndef...#pragma once)
- 关于头文件定义中#ifdef,#define,#endif和#pragma once的区别
- #pragma once 文件编译一次
- c++头文件包含 #ifndef ##pragma once
- #pragma once与 #ifndef的区别为了避免同一个文件被include多次
- 避免头文件复用-#pragma once与#ifndef的区别
- 头文件中ifndef/define/endif的作用以及#pragma once使用
- c++ 避免头文件重复引用 (pragma once与 #ifndef的区别)
- #pragma once与#ifndef两种防止头文件二次编译的区别