目录 一.头文件重复包含编译器报错 1.简单的理解头文件重复包 2.老流氓的理解头文件重复包 二.通过宏定义解决头文件重复包含 1.通过 #ifndef / #define 解决头文件重复包含 2.通过 #pragma once 解决头文件重复包含 三.通过插件 Visual Assist 设置快捷
#pragma once指令告诉编译器头文件只应该被包含一次。例如: #pragma once /* 头文件内容 */ 复制代码 使用#pragma once时,编译器会确保头文件的内容在同一个编译单元中只被包含一次。虽然#pragma once不是C语言标准的一部分,但它在大多数现代编译器中都被支持。 这两种方法都可以有效地解决头文件的重复包含问题。
除非对项目的编译效率有严格的要求,强烈推荐读者选用第一种解决方案,即采用 #ifndef / #define / #endif 组合解决头文件被重复引入。 另外在某些场景中,考虑到编译效率和可移植性,#pragma once 和 #ifndef 经常被结合使用来避免头文件被重复引入。比如说: #pragma once #ifndef _STUDENT_H #define _STUDENT_H ...
如果某个头文件有多份拷贝,本方法不能保证他们不被重复包含。当然,相比宏名碰撞引发的“找不到声明”的问题,这种重复包含很容易被发现并修正。 兼容性可能不够好。 C++/C中防止头文件的重复包含的解决办法及区别 如何防止头文件被重复包含、嵌套包含
下面我们给大家介绍一下C语言头文件避免重复包含吧!假定有以下几个头文件及其包含关系为: File1.h,file2.h,file3.h,file4.h,file5.h,main.cpp 那幺:file3.h包含file1.h,file2.h,file4.h包含file1.h,file2.h,file5.h包含file3.h,file4.h。如许就会导致在file5中对file1和file2...
头文件包含是一个递归(循环)的过程,如果被包含的头文件中还包含了其他的头文件,预处理器会继续将它们也包含进来;这个过程会一直持续下去,直到不再包含任何头文件,这与递归的过程颇为相似。 递归包含会导致一个问题,就是重复引入同一个源文件。例如在某个自定义头文件 xyz.h 中声明了一个 FILE 类型的指针,以使...
防止头文件被重复包含的两种方式: 1.条件编译的宏 2.#pragma once 先来说说第一种: #ifndef __HEADNAME__H__ #define __HEADNAME__H__ //... //头文件 #endif 1. 2. 3. 4. 5. 6. 7. C/C++标准支持#ifndef的方式,当头文件第一次被包含时正常处理 _HEADNAME__H__ 被定为1,当再...
第1行是由#include "one.h"导致的,第2、3行是由#include "two.h"导致的(因为two.h里面包含了one.h)。可以看出来,one函数被声明了2遍,根本就没有必要,这样会降低编译效率。 为了解决这种重复包含同一个头文件的问题,一般我们会这样写头文件内容: ...
方法一:用ifndef防止头文件嵌套 一般情况下采用这种手段确保头文件只编译一次。但是此方法只能解决头文件重复包含导致的编译阶段重定义错误;不能解决全局变量定义和函数定义导致的链接阶段重定义错误。 一般采用下面的形式: /* *myheader.h */ #ifndef _MYHEADER_H_ #define _MYHEADER_H_ /*头文件内容*/ #endif...