赞
踩
#pragma once
是一个比较常用的C/C++预处理指令,只要在头文件的最开始加入这条预处理指令,就能够保证头文件只被编译一次,防止头文件被重复引用。
**“被重复引用”**指头文件在cpp文件中多次被include,include嵌套造可能现象造成头文件多次引用。
举例:a.h文件#include “c.h”,b.cpp文件#include “a.h” 和#include “c.h”。此时b.h就重复引用了c.h
teacher.h
//#pragma once
class Teacher
{
};
test.cpp
#include "Teacher.h"
#include "Teacher.h"//错误 C2011 “Teacher”:“class”类型重定义
#ifndef的方式依赖于宏名字不能冲突,这不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含。
#ifndef _TEST_H_
#define _TEST_H_
#endif // !TEST_H
_TEST_H_为预处理器变量
书写格式:头文件名大写,前后加下划线,“.”用下划线代替。比如test.h表示为_TEST_H_
预处理器变量两种状态:已定义或未定义
- #ifndef 指示检测指定的预处理器变量是否未定义,如果未定义,那么跟在后面的所有指示被处理,直到出现#endif;如果已定义,#ifndef测试为假,该指示和#endif指示间的代码都被忽略
- #define 指示接受一个名字并定义该名字为预处理器变量
在调用该头文件时一般用#include “add.h”
#pragma once则由编译器提供保证:同一个文件不会被编译多次。注意这里所说的“同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。
#pragma once
总结:
#ifndef,#define,#endif
是C/C++语言中的宏定义,通过宏定义避免文件多次编译。所以在所有支持C++语言的编译器上都是有效的,如果写的程序要跨平台,最好使用这种方式。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。