c++#ifndef 的作用,高分在线等,举例!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++#ifndef 的作用,高分在线等,举例!相关的知识,希望对你有一定的参考价值。

举例清楚一点,我比较笨

#ifndef TEST
...
...
#endif

字面意思是当未定义宏:TEST时,执行ifndef和endif中间的语句。

具体作用是避免重复定义宏或者重复包含同一个头文件。举例:
同一个文件中,如果文件很大,不确定某一个宏有没有定义,保险的做法就是在定义宏的时候使用:
#ifndef SIZE
#define SIZE 20
#endif
通过这三句就可以避免SIZE的重复定义。

多个文件时避免重复包含同一个头文件做法如下:
文件:a.h
#include <stdio.h>
#define SIZE 20
int num=10;

文件:1.c
#include "a.h"
int main()

printf("%d\n",SIZE);
return 0;


文件:2.c
#include "a.h"
int main()

printf("%d\n",SIZE);
return 0;


一般工程都有多个文件,当对1.c和2.c同时编译时,这里就会出现重复包含头文件的错误,当然不止一个错误,头文件有可能定义了很多的宏,全局变量等等。
解决办法就是在a.h中加入ifndef语句:
#ifndef __A_H__
#define __A_H__
#include <stdio.h>
#define SIZE 20
int num=10;
#endif

这里使用的宏:__A_H__ 是一种习惯写法(使用头文件名加下划线),因为同一个工程中文件的名字一般不会相同的(也不允许),使用文件名做宏正好可以避免遇到重复的宏名,继而解决了 SIZE 和 num 的重复定义。养成良好的习惯,只要是头文件都用ifndef和endif包含起来,可以避免很多不必要的错误。

纯手打,忘采纳,有问题可以再问。。。追问

可以留个QQ吗?我自学党。很多问题没人可以问

追答

304960988

参考技术A 检测是否定义宏,如果没有定义宏,那么它与#endif之间的语句会被编译,如果定义了该宏,那么它与#endif中的语句不会被编译。
举个例子:
# define MACRO
# ifndef MACRO
// 这里的语句不会被编译
# else
// 这里的语句会被编译
# endif

或者,在没有定义宏MACRO时,
# ifndef MACRO
// 这里的语句会被编译
# endif

比较常用的用法是用在头文件中,防止头文件中的内容被重复编译:
# ifndef HEADER
# define HEADER
//...
# endif
这样,在第一次编译时就会定义宏HEADER,第二次编译时就会避免重复编译其中的内容

希望对你有帮助!追问

可以留个QQ吗?我自学党。很多问题没人可以问

参考技术B #ifndef表示 if not define
#ifdef表示 if define

定义成空的呗

这就是个小技巧, 为了防止两次include同一个头文件。
第一次include的时候由于 ns_telnet_h没定义,所以宏里面的内容(也就是头文件的全部内容了) 会被编译。 而第二次include它的时候由于 ns_telnet_h已经被定义,所以宏里面的内容不会被编译。 这个宏没define成任何有意义的东西,是因为实际上只是需要ns_telnet_h存在就可以,它的内容无所谓
参考技术C 字面意思是当未定义宏:TEST时,执行ifndef和endif中间的语句。

具体作用是避免重复定义宏或者重复包含同一个头文件。举例:
同一个文件中,如果文件很大,不确定某一个宏有没有定义,保险的做法就是在定义宏的时候使用:
#ifndef SIZE
#define SIZE 20
#endif
通过这三句就可以避免SIZE的重复定义。

多个文件时避免重复包含同一个头文件做法如下:
文件:a.h
#include <stdio.h>
#define SIZE 20
int num=10;

文件:1.c
#include "a.h"
int main()

printf("%d\n",SIZE);
return 0;


文件:2.c
#include "a.h"
int main()

printf("%d\n",SIZE);
return 0;


一般工程都有多个文件,当对1.c和2.c同时编译时,这里就会出现重复包含头文件的错误,当然不止一个错误,头文件有可能定义了很多的宏,全局变量等等。
解决办法就是在a.h中加入ifndef语句:
#ifndef __A_H__
#define __A_H__
#include <stdio.h>
#define SIZE 20
int num=10;
#endif

这里使用的宏:__A_H__ 是一种习惯写法(使用头文件名加下划线),因为同一个工程中文件的名字一般不会相同的(也不允许),使用文件名做宏正好可以避免遇到重复的宏名,继而解决了 SIZE 和 num 的重复定义。养成良好的习惯,只要是头文件都用ifndef和endif包含起来,可以避免很多不必要的错误。

纯手打,忘采纳,有问题可以再问。。。
赞同0|评论

检举|30 分钟前abccsss|当前分类:6 级检测是否定义宏,如果没有定义宏,那么它与#endif之间的语句会被编译,如果定义了该宏,那么它与#endif中的语句不会被编译。
举个例子:
# define MACRO
# ifndef MACRO
// 这里的语句不会被编译
# else
// 这里的语句会被编译
# endif

或者,在没有定义宏MACRO时,
# ifndef MACRO
// 这里的语句会被编译
# endif

比较常用的用法是用在头文件中,防止头文件中的内容被重复编译:
# ifndef HEADER
# define HEADER
//...
# endif
这样,在第一次编译时就会定义宏HEADER,第二次编译时就会避免重复编译其中的内容

希望对你有帮助!赞同0|评论

查看被隐藏回答 检举|41 分钟前qjx002417|当前分类:1 级#ifndef表示 if not define
#ifdef表示 if define

定义成空的呗

这就是个小技巧, 为了防止两次include同一个头文件。
第一次include的时候由于 ns_telnet_h没定义,所以宏里面的内容(也就是头文件的全部内容了) 会被编译。 而第二次include它的时候由于 ns_telnet_h已经被定义,所以宏里面的内容不会被编译。 这个宏没define成任何有意义的东西,是因为实际上只是需要ns_telnet_h存在就可以,它的内容无所谓赞同追问

可以留个QQ吗?我自学党。很多问题没人可以问

AT89C51单片机进行多机通信等问题求教大神!!明天考试!!在线高分求高人

AT89C51单片机进行多机通信时常采用主从结构,它的特点是什么?应如何连接?如何实现主从结构式的多机通信!!求教高人啊。。。加分!

51单片机多机通信建议不用串口。
因为串口只管发送和接收数据,当主机发送一个数据时,从机的串口都会接收这个数据,从而多机通信的意义就没有了。
建议使用IIC通信协议,因为IIC通信方式首先是要发送从机地址的,而在总线上的每一个从机都会验证这个地址,若是自己的地址,此从机就会准备接收数据,不是自己的地址就会关闭数据接收。具体可参考IIC通信协议。
或者你可以使用串口,但是发送的第一个数据必须是地址,而且每一个从机都要自己去编写地址验证函数,从而来模拟IIC通信协议。
希望我的回答能帮助到你。
参考技术A 要是51的话,你去看一下串行口那一章啊,里面有介绍到SCON寄存器,介绍了一下多机通信的实现过程。

大学的东西,应该不会考太难,无非就是从书上出点题目,你去看一下串口通信那章,大概是讲设置波特率那章,忘记了,挺遥远的事情。
参考技术B 你这个多机通信是有线的还是无线的呢!是TCP吗?需要TCP模块还是RF无线模块实现主从多机通信的啊?说的不清楚啊!追问

题目就这么多啊。。没有那么专业。。就是我们大学的考试题。。明天就要考试了。。。求解答

追答

这就不好说了!不知道你们所谓的主从指的是哪方面的主从!

参考技术C 问清楚点 不要问的那么宽泛

以上是关于c++#ifndef 的作用,高分在线等,举例!的主要内容,如果未能解决你的问题,请参考以下文章

举例说明SQL注入的一般过程!

高分,在线等。C#的GridView中的CheckBox始终为灰色,不能勾选

高分求、时时在线等、仅仅是翻译几个初二英语句子。。。

◆关于SAS软件不能运行的问题,高分,在线等。◆

【高分】高中英语翻译【速度,在线等 ① 】

pb 9.0 批量导出excel 高分在线等