#define #endif,define ifdef endif,浅谈#ifndef,#define,#endif的作用和用法

#define #endif,define ifdef endif,浅谈#ifndef,#define,#endif的作用和用法

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

#define #endif,define ifdef endif,浅谈#ifndef,#define,#endif的作用和用法