C++学习笔记之pragma once的理解

#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,#define,#endif

#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则由编译器提供保证:同一个文件不会被编译多次。注意这里所说的“同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。

#pragma once

总结
#ifndef,#define,#endif是C/C++语言中的宏定义,通过宏定义避免文件多次编译。所以在所有支持C++语言的编译器上都是有效的,如果写的程序要跨平台,最好使用这种方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值