下面简单说说#ifndef、#define、#endif的作用和用法。我觉得边肖挺好的。我现在就分享给你,给你一个参考。来和边肖一起看看吧。
问题:ifndef/define/endif的主要目的是防止头文件的重复包含和编译。
========================================================
用法:。h文件,如下所示:
#ifndef XX_H
#定义XX_H
.
#endif
这样,如果这个头文件被包含在两个地方,就不会被包含两次。
因为XX_H已经在第二个包含中定义,所以不再包含它。
-
#ifndef GRAPHICS_H //防止graphics.h被重复引用
#定义图形_H
# include ath . h//引用标准库的头文件。
…
# include " my header . h "//引用非标准库的头文件
…
void函数1(…);//全局函数声明
…
类盒//类结构声明
{
…
};
#endif
-
这意味着当您创建多个文件时,多个文件都包含这个头文件。
-
举个例子,顺便分析一下:
假设你的项目中有四个文件,分别是a.cpp,b.h,c.h,d.h。
A.cpp的负责人是:
#包含“b.h”
#包含“c.h”
波黑和波黑的首脑都是:
#包括“深”
而d.h有D类的定义.
这样一来,
编译a.cpp时,根据#include 'b.h '编译B.H .的问题,然后根据b.h中的#include 'd.h '编译D.H .的这个文件,这样,d.h中的D类就编译好了;
然后编译C.H .根据a.cpp的第二句#include 'c.h '最终会找到D.H中的类D .但是,类D之前已经编译过了,所以会报错重定义错误。
添加ifndef/define/endif可以防止这种重定义错误。
-
-
1.例如,您有两个C文件,它们都包含相同的头文件。编译时要把两个C文件一起编译成一个runnable文件,于是问题就来了,大量声明冲突。让我们将头文件的内容放在#ifndef和#endif中。
不管你的头文件是否会被多个文件引用,你都必须添加这个。
一般格式是这样的:
#ifndef id
#定义id
.
.
#endif id
理论上可以自由命名,但是每个头文件的这个“ID”应该是唯一的。标识的命名规则通常是第一个文件名,全部大写,前后加下划线,并且“.”在文件名中也加下划线,如stdio.h
#ifndef _STDIO_H_
#define _STDIO_H_
.
#endif
2.#ifndef中定义变量的问题(一般不在#ifndef中定义)。
#ifndef AAA
#定义AAA
.
int I;
.
#endif
vc中有一个变量定义,有一个错误是重复定义了I,但是在c中编译成功。
原因:
(1).当您首次使用。要生成的带有此头的cpp文件。obj,int i在里面定义。当另一个。带有此标题的cpp会生成。obj再次[单独],int i再次定义。那么两个宾语由另一个连接。cpp也包括这个标题,并且将出现重复的定义。
(2).源程序的文件扩展名更改为。C,VC按照C语言而不是C的语法来编译源程序,在C语言中,如果遇到多个int i,其中一个会自动被认为是定义,其他的都是声明。
(3)连接结果。C语言和C语言不一样。可能(猜测)C语言在编译的时候,把全局变量默认为强符号,所以连接错了。c语言是根据是否初始化来判断的。
参考解决方法:
(1).将源程序的文件扩展名更改为。c.
(2).推荐的解决方案:只有extern int i在。h;
定义于。卡片打印处理机(Card Print Processor的缩写)
#ifndef __X_H__
#定义__X_H__
外部整数I;
# endif//_ _ X _ H _ _ int I;
注意:变量通常不在。h文件。
以上就是边肖带来的# ifndef、# define、# endif的功能和用法。希望大家多多支持~
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。