当前位置:   article > 正文

C++学习笔记之pragma once的理解_pragma once什么意思

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
{
};
  • 1
  • 2
  • 3
  • 4

test.cpp

#include "Teacher.h"
#include "Teacher.h"//错误	C2011	“Teacher”:“class”类型重定义
  • 1
  • 2

方式一:#ifndef,#define,#endif

#ifndef的方式依赖于宏名字不能冲突,这不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含。

#ifndef _TEST_H_
#define _TEST_H_

#endif // !TEST_H
  • 1
  • 2
  • 3
  • 4

_TEST_H_为预处理器变量

书写格式:头文件名大写,前后加下划线,“.”用下划线代替。比如test.h表示为_TEST_H_

预处理器变量两种状态:已定义或未定义

  • #ifndef 指示检测指定的预处理器变量是否未定义,如果未定义,那么跟在后面的所有指示被处理,直到出现#endif;如果已定义,#ifndef测试为假,该指示和#endif指示间的代码都被忽略
  • #define 指示接受一个名字并定义该名字为预处理器变量

在调用该头文件时一般用#include “add.h”

方式二:pragma once

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

#pragma once
  • 1

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/482177
推荐阅读
  

闽ICP备14008679号