下面简单说说#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的功能和用法。希望大家多多支持~