- 7
- 0
- 约4.98千字
- 约 7页
- 2017-06-07 发布于湖北
- 举报
ifndef/define/endif作用和用法
1.问题:ifndef/define/endif”主要目的是防止头文件的重复包含和编译,偶只知道这个概念不懂的是怎么个用法,和为什么要用它~~高手请指点一下~~谢谢~~~!!!
--------------------------------------------------------------------------------------------------
用法:
.h文件,如下:
#ifndef XX_H
#define XX_H
...
#endif
这样如果有两个地方都包含这个头文件,就不会出现两次包含的情况 。。
因为在第二次包含时 XX_H 已经有定义了,所以就不再 include了
--------------------------------------------------------------------------------------------------
#ifndef GRAPHICS_H // 防止graphics.h被重复引用
#define GRAPHICS_H
#include math.h // 引用标准库的头文件
…
#include “myheader.h” // 引用非标准库的头文件
…
void Function1(…); // 全局函数声明
…
class Box // 类结构声明
{
…
};
#endif
--------------------------------------------------------------------------------------------------
那是指你建立多个文件时,多个文件里都包含这个头文件
--------------------------------------------------------------------------------------------------
给你举个例子,再顺便分析一下:
假设你的工程里面有4个文件,分别是a.cpp,b.h,c.h,d.h。
a.cpp的头部是:
#include b.h
#include c.h
b.h和c.h的头部都是:
#include d.h
而d.h里面有class D的定义。
这样一来,
编译器编译a.cpp的时候,先根据#include b.h 去编译b.h这个问题,再根据b.h里面的#include d.h ,去编译d.h的这个文件,这样就把d.h里面的class D编译了;
然后再根据a.cpp的第二句#include c.h ,去编译c.h,最终还是会找到的d.h里面的class D,但是class D之前已经编译过了,所以就会报重定义错误。
加上ifndef/define/endif,就可以防止这种重定义错误。
--------------------------------------------------------------------------------------------------
A.h 里
#ifndef A_H
#define A_H
...
#endif
B.h 和 C.h都include A.h
D.h里
include B.h
include C.h
在预编译的过程中,执行到include C.h 时会因为在上一句的时候已经定义了A_H这个宏,所以此时的的
的ifndef条件不满足,也就不会再一次包含A.h,起到了防止重复引用头文件的效果。
--------------------------------------------------------------------------------------------------
1.比如你有两个C文件,这两个C文件都include了同一个头文件。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。 还是把头文件的内容都放在#ifndef和#endif中吧。
不管你的头文件会不会被多个文件引用,你都要加上这个。
一般格式是这样的:
#ifndef 标识
#define 标识
......
......
#endif 标识
在理论上来说可以是自由命名的,但每个头文件的这个“标识”都应该是唯一的。标识的命名规则一般是头文件名全大写,前后加下划线,并把文件名中的“.”也变成下划线,如:stdio.h
#ifndef _STDIO_H_
#define _STDIO_H_
......
#endif
2.在#ifndef中定义变量出现的问题(一般不定义在#ifndef中)。
#ifndef AAA
#define AAA
...
int
您可能关注的文档
- 河北省望都中学高二期中考试试题教案.doc
- 第一章 “编写 Transact-SQL 语句”教程.pdf
- 河北信息中考选择题258道、判断题101道教案.doc
- GIS07第七篇 地理信息系统的应用.ppt
- 河辰MAILGARD佑友 邮件系统技术白皮书教案.pdf
- 第一章 “诚实守信 立德树人”主题征文.doc
- 河大版_苗逢春_四年级信息技术全册教案教案.docx
- 第一章 “打印插件”使用说明.docx
- 第一章 “等待”话题作文导写.ppt
- GKE设置和学习资料.doc
- 2025-2026学年天津市和平区高三(上)期末数学试卷(含解析).pdf
- 2025-2026学年云南省楚雄州高三(上)期末数学试卷(含答案).pdf
- 2025-2026学年甘肃省天水市张家川实验中学高三(上)期末数学试卷(含答案).docx
- 2025-2026学年福建省厦门市松柏中学高二(上)期末数学试卷(含答案).docx
- 2025-2026学年广西钦州市高一(上)期末物理试卷(含答案).docx
- 2025-2026学年河北省邯郸市临漳县九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省石家庄二十三中七年级(上)期末历史试卷(含答案).docx
- 2025-2026学年海南省五指山市九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省唐山市玉田县九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省邢台市市区九年级(上)期末化学试卷(含答案).docx
最近下载
- 2025高中英语教师课程标准考试模拟试卷及参考答案.docx VIP
- 第12课 绿意再生课件-赣美版(2024)初中美术七年级下册.pptx VIP
- 2025年青岛西海岸新区自主招生化学试题及答案.docx VIP
- 2024-2025学年江苏卫生健康职业学院单招《英语》考前冲刺练习(真题汇编)附答案详解.docx VIP
- GJ B 2446-2-2013 J30系列微矩形电连接器详细规范.pdf VIP
- 2025年内蒙古中考物理试卷及答案.docx VIP
- 第11课+传递绿色理念+课件+2024—2025学年赣美版(2024)+初中美术七年级下册.pptx VIP
- 2025年江苏卫生健康职业学院单招《数学》真题带答案详解(模拟题).docx VIP
- 2023年广东省中考道德与法治试卷真题及答案详解.pdf
- 相变的软模理论.ppt VIP
原创力文档

文档评论(0)