C++#ifndef与#ifdef的区别是什么?

C++#ifndef与#ifdef的区别是什么?,第1张

一、使用场景不同:

#ifndef使用场景为:

1、头文件中使用,防止头文件被多重调用。

2、作为测试使用,省去注释代码的麻烦。

3、作为不同角色或者场景的判断使用。

#ifdef使用场景:

判断某个宏是否被定义,若已定义,执行随后的语句。

二、含义不同:

#ifndef表示ifnotdefine。

#ifdef表示ifdefine。

 扩展资料:

#ifndef起到的效果是防止一个源文件两次包含同一个头文件,而不是防止两个源文件包含同轿锋樱一个头文件。

而编译时,这两个C文件要一同编译成一个可运行文件。

把头文件的内容都放在#ifndef和#endif中。不管头文件会不会被多个文件引用,都要加上这个。

一般格式是这样的:

#ifndef <标识>

#define <标识>.

...........

#endif<标识>

在理论上来基辩说可以是自由命名的,但每个头文件闭丛的这个“标识”都应该是唯一的。

标识的命名规则一般是头文件名全大写,前后加下划线,并把文件名中的“.”也变成下划线,如:

#ifndef_STDIO_H_#define_STDIO_H_......#endif.

在#ifndef中定义变量出现的问题(一般不定义在#ifndef中)。

#ifndefAAA#defineAAA...inti...#endif

参考资料:

百度百科-C语言

没有说得那么繁琐.

因为对于一个大程序而言,我们可能要定义很多常量(

不管是放在源文件还是头文件

),那么我们有时考虑定义某个常量时,我们就必须返回检查原来此常量是否定义,但这样做很麻烦.if

defined宏正是为这种情况提供了解决方案.举个例子,如下:

#define

....

#define

....

........

........

#define

a

100

.......

此时,我们要检查a是否定义(假设我们已经记悉冲判判庆不着这点了),或者我们要给a一个不同的值,就加入如下句子

#if

defined

a

#undef

a

#define

a

200

#endif

上述语句检验a是否被定义,如果被定义,则用#undef语句解除定义,并重新定义a为200

同样,检验a是否定义:

#ifndef

a

//如果a没有睁改被定义

#define

a

100

#endif

以上所用的宏中:#undef为解除定义,#ifndef是if

not

defined的缩写,即如果没有定义。

这就是#if

defined

的唯一作用!

这个是编译预处理,不是真正的为了定义什么,而是为了避免重复定义某些内容李州源。

比如

#ifndef _STDIO_H_

#define _STDIO_H_

这里是要保护的内容

#enif

如果是第一次包含这个文件的时候_STDIO_H_是未定义的,所以后面的内容会被展迹燃开,而第哪态二次包含这个文件的时候因为_STDIO_H_已经被定义过了,所以后面的内容就会被跳过,不会被展开。

这样当你重复的包含这个文件的时候,被保护的内容只会被展开一次,这样就防止的重复定义。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12261829.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存