C++学习笔记之pragma once的理解 | 您所在的位置:网站首页 › once是什么意思英文 › 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++语言的编译器上都是有效的,如果写的程序要跨平台,最好使用这种方式。 |
CopyRight 2018-2019 实验室设备网 版权所有 |