#ifdef __cplusplus 的作用及#ifndef, #ifdef,#endif,#define的区别

版权声明:本文为博主原创文章,如需转载请注明出处:https://blog.csdn.net/qq_36059321/article/details/82854709

C与C++在函数的编译过后,由于C++支持函数的重载,所以C跟C++在编译之后生成的汇编码会有所不同,在编译生成的汇编码中,对于C的函数只是一个函数的函数名,而C++函数则会带有一些额外信息,如返回值跟参数类型。

当时C++之父设计C++之时,已经存在了大量的C语言代码,为了支持原有的C库,在C++代码中尽可能的去支持C,而extern"C"就是其中的一个策略。 extern"C"的作用就是告诉编译器,这段代码用按照C语言的编译风格去进行编译

#ifdef __cplusplus
    extern "c"{    //告诉C+++编译器,扩号里按照C的命名规则编译
#endif
    
//代码
	
#ifdef __cplusplus
}
#endif

#ifdef __cplusplus是什么意思呢,__cplusplus是cpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码。
所以上面的代码的意思就是:
如果这是一段cpp的代码,那么加入extern"C"{}来处理处理括号中的代码。

在代码中可以频繁的看到 #ifndef, #ifdef,#endif,#define 这些关键字,看起来觉得怎么长的这么像,下面就来分析一下这些关键字:

#difine:

#define是宏定义,大家都应该熟悉,#define作用就是字符替换,在编译过程中不会去检查类型安全,这一点上或许没得C++中的const的安全,但是作用是非常大的,来看看几个例子:

#difine PI 3.14

这个作用就是直接在代码中运用PI去代替3.14 可以起到一个很直观的作用,在后面代码中直接看到变量名就知道其中的含义,而且可以直接改变宏的值去进行代码的修改,起到一个很好的维护作用。
宏的使用也会出现一些常见的错误

#define  mul(a,b)  a*b
sub(3+2,4);

得到的结果是11,并不是20,因为宏的作用只是直接替换,所以计算的方式就是3+2*4=11,需要得到20的话,只要加上两个括号即可:

#define  mul((a),(b))  a*b
sub(3+2,4);

这样就能得到20了

#ifdef ,#endif:
#ifdef其实就是两个关键字结合在一起而已:if ,define ,这样就能看的很明白了,假设为真,则进行编译下面代码,注:#ifdef是在编译时执行,如果为真,则进行编译下面代码,如果为假,则不进行编译在代码中可以通过这个宏去注释一段代码:

#ifdef 0
	//代码
#endif

#ifndef ,#endif:
所以反过来说,#ifndef的意思就是 if not define()如果没有为(真),则进行编译下面代码

#ifndef _HEAD_H_
#define _HEAD_H_
#endif

上述代码意思:如果没有宏(HEAD_H),则编译下面代码,然后紧接着一个

#define _HEAD_H_

这样就定义了宏,这样就可以去防止重复编译了。当然名字可以自己随便取,但是一般都是头文件的大写,这样更具有可读性。

#ifndef _A_H_
#define _A_H_
#endif

这样的可读性就很差,不建议这样命名。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值