两者功能一样,防止重复包含被多次编译.建议头文件加入#pragma once C++头文件开头的两句与结尾的一句#ifndef <标识>#define <标识>类代码#endif为了防止头文件的重复包含和编译,例如a.h中有#include "c.h",b.cpp文件导入了#include "a.h" 和#include "c.h"此时就会造成c.h重复引用.标识名一般写成头文件名字的全大写_H…
C++中防止头文件被多次include 的常见方式有: 1) 用#ifndef ...  #define ... #endif  宏 #ifndef __MYHEADER_H__#define __MYHEADER_H__ // Here is my class ... #endif 2) 用 #pragma once #pragma once // Here is my class ... 建议使用 #pragma once ,原因: 1)  代码简洁,维护性比较好. #pragma once…
1. #pragma once用来防止某个头文件被多次include: #ifndef,#define,#endif用来防止某个宏被多次定义.   2. #pragma once是编译相关,就是说这个编译系统上能用,但在其他编译系统不一定可以,也就是说移植性差,不过现在基本上已经是每个编译器都有这个定义了: #ifndef,#define,#endif这个是C++语言相关,这是C++语言中的宏定义,通过宏定义避免文件多次编译.所以在所有支持C++语言的编译器上都是有效的,如果写的程序要跨平台,最…
想必很多人都看过“头文件中用到的 #ifndef/#define/#endif 来防止该头文件被重复引用”.但是是否能理解“被重复引用”是什么意思?头文件被重复引用了,会产生什么后果?是不是所有的头文件中都要加入#ifndef/#define/#endif 这些代码? 1. 其实“被重复引用”是指一个头文件在同一个cpp文件中被include了多次,这种错误常常是由于include嵌套造成的.如:存在a.h文件#include "c.h"而此时b.cpp文件导入了#include &q…
例如:要编写头文件test.h 在头文件开头写上两行: #ifndef _TEST_H #define _TEST_H//一般是文件名的大写 ············ ············ 头文件结尾写上一行: #endif 大概是以前没有学好吧,对这里不是很理解,为什么要用这些呢?刚才上网查了查,借鉴了点高手的,自己总结了一点,就写在这里了,有什么错误之处,请大侠们指出 .比如你有两个C文件,这两个C文件都include了同一个头文件.而编译时,这两个C文件要一同编译成一个可运行文件,于是…
想必很多人都看过“头文件中用到的 #ifndef/#define/#endif 来防止该头文件被重复引用”.但是是否能理解“被重复引用”是什么意思?头文件被重复引用了,会产生什么后果?是不是所有的头文件中都要加入#ifndef/#define/#endif 这些代码? 1. 其实“被重复引用”是指一个头文件在同一个cpp文件中被include了多次,这种错误常常是由于include嵌套造成的.如:存在a.h文件#include "c.h"而此时b.cpp文件导入了#include &q…
在一个大的软件工程里面,可能会有多个文件同时包含一个头文件,当这些文件编译链接成一个可执行文件时,就会出现大量重定义的错误.在头文件中实用#ifndef #define #endif能避免头文件的重定义.方法:例如要编写头文件test.h在头文件开头写上两行:#ifndef _TEST_H#define _TEST_H//一般是文件名的大写头文件结尾写上一行:#endif这样一个工程文件里同时包含两个test.h时,就不会出现重定义的错误了.分析:当第一次包含test.h时,由于没有定义_TES…
想必很多人都看过“头文件中的 #ifndef #define #endif 防止该头文件被重复引用”.但是是否能理解“被重复引用”是什么意思?是不能在不同的两个文件中使用include来包含这个头文件吗?如果头文件被重复引用了,会产生什么后果?是不是所有的头文件中都要加入#ifndef/#define/#endif 这些代码? 其实“被重复引用”是指一个头文件在同一个c文件中被include了多次,这种错误常常是由于include嵌套造成的.比如:对于a.h,b.h中有#include a.h,…
大家知道,我们写.h文件时,通常会加上防卫式声明,有以下两种方式: 1. 宏定义 1 2 3 4 #ifndef _FILENAME_ #define _FILENAME_ //... #endif 2. 编译器指令 1 #pragma once 但是,为什么头文件中需要添加这种防卫式声明呢?如果没有这样的声明,会出现怎样的问题.这里,先看一个例子. -- "Car.h",代码如下(并没有添加防卫式声明): 1 2 3 4 5 // Car.h class Car { // ... }…
背景 在编译的时候,出现"redefine"的错误,最后检查才发现对应的头文件没有写正确的预编译信息: #ifndef _HeadFileName_H #define _HeadFileName_H // 头文件内容 #endif //_HeadFileName_H 添加后,不再报错,然后就思考,这个"#ifndef #define #endif"的作用到底是什么?于是有了此篇文章. 正文 "#ifndef #define #endif"其实是预…