欢迎来到天天文库
浏览记录
ID:8819715
大小:45.50 KB
页数:7页
时间:2018-04-08
《ifndef与define与endif作用和用法》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、ifndef/define/endif作用和用法1.问题:ifndef/define/endif”主要目的是防止头文件的重复包含和编译,偶只知道这个概念不懂的是怎么个用法,和为什么要用它~~高手请指点一下~~谢谢~~~!!!--------------------------------------------------------------------------------------------------用法:.h文件,如下:#ifndefXX_H#defineXX_H...#endif这
2、样如果有两个地方都包含这个头文件,就不会出现两次包含的情况。。因为在第二次包含时XX_H已经有定义了,所以就不再include了--------------------------------------------------------------------------------------------------#ifndefGRAPHICS_H//防止graphics.h被重复引用#defineGRAPHICS_H#include//引用标准库的头文件…#include“m
3、yheader.h”//引用非标准库的头文件…voidFunction1(…);//全局函数声明…classBox//类结构声明{…};#endif--------------------------------------------------------------------------------------------------那是指你建立多个文件时,多个文件里都包含这个头文件--------------------------------------------------------
4、------------------------------------------给你举个例子,再顺便分析一下:假设你的工程里面有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里面有classD的定义。这样一来,编译器编译a.cpp的时候,先根据#include"b.h"去编译b.h这个问题,再根据b.h里面的#include"d.h",去编译d.h的这个文件,这
5、样就把d.h里面的classD编译了;然后再根据a.cpp的第二句#include"c.h",去编译c.h,最终还是会找到的d.h里面的classD,但是classD之前已经编译过了,所以就会报重定义错误。加上ifndef/define/endif,就可以防止这种重定义错误。--------------------------------------------------------------------------------------------------A.h里#ifndefA_H#de
6、fineA_H...#endifB.h和C.h都include"A.h"D.h里include"B.h"include"C.h"在预编译的过程中,执行到include"C.h"时会因为在上一句的时候已经定义了A_H这个宏,所以此时的的的ifndef条件不满足,也就不会再一次包含A.h,起到了防止重复引用头文件的效果。----------------------------------------------------------------------------------------------
7、----1.比如你有两个C文件,这两个C文件都include了同一个头文件。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。还是把头文件的内容都放在#ifndef和#endif中吧。不管你的头文件会不会被多个文件引用,你都要加上这个。一般格式是这样的:#ifndef<标识>#define<标识>............#endif<标识>在理论上来说可以是自由命名的,但每个头文件的这个“标识”都应该是唯一的。标识的命名规则一般是头文件名全大写,前后加下划线,并把文件名中
8、的“.”也变成下划线,如:stdio.h#ifndef_STDIO_H_#define_STDIO_H_......#endif2.在#ifndef中定义变量出现的问题(一般不定义在#ifndef中)。#ifndefAAA#defineAAA...inti;...#endif里面有一个变量定义在vc中链接时就出现了i重复定义的错误,而在c中成功编译。原因:(1).当你第一个使用这个头的.cpp文件生成.obj的时候,inti在里面定义了当另外一个使用这个
此文档下载收益归作者所有