C语言中:#ifndef 的用法及延伸-20210617

最近由于项目原因需要用到C语言,记录一下看代码时遇到的问题以及知识盲区。

语法结构:

#ifndef _XXX_H_
#define _XXX_H_
...
...
...
#endif

 作用:

防止头文件的重复包含和编译

 C语言编译系统包括预处理,编译和链接等部分。C语言在对程序进行编译时,会先根据预处理命令进行“预处理”。

#ifndef 预处理命令(宏定义、文件包含、条件编译)中的“条件编译”。

  #ifndef x      //先测试x是否被宏定义过

  #define x     //如果没有宏定义下面就宏定义x并编译下面的语句

  ...

  #endif          //如果已经定义了则编译#endif后面的语句

条件指示符#ifndef检查预编译常量在前面是否已经被宏定义。如果在前面没有被宏定义,则条件指示符的值为真,于是从#ifndef到#endif之间的所有语句都被包含进来进行编译处理。

相反,如果#ifndef指示符的值为假,则说明他在前面已经被宏定义过,它与#endif指示符之间的行将被忽略。条件指示符#ifndef 的最主要目的是防止头文件的重复包含和编译。

理解:

如果一个项目里有两个.c文件(A/B)同时include了同一个头文件(H),而编译时,这两个.c文件要一同编译成一个可运行文件,在文件A中include了头文件H,在文件B中再次include头文件的话,会产生声明冲突。而将头文件内容放到#ifndef  #endif  中,会在include之前判断该头文件是否已经被include过,避免重复引用。

参考链接

  • 11
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值