c语言中的#号知识点分享

电子说

1.2w人已加入

描述

/ 常规出牌,首先聊一聊 /

c语言中的#号确实用得挺多的,比如说最开始编程的时候,大家最喜欢的#include…,确实有了这个东西我们就可以调用了我们想调用的东西了,心里必定欢喜!一般代码量,或者阅码量不多的筒子们,可能熟悉的#还有宏定义#define,或者是预编译#if 或者更进一步#ifndef等预编译符号,应该大部分小伙伴不太用到#号的其他功能了!(哈哈,其实我也差不多吧!)所以最近也是学习总结了一些,可能以后也用不太上,可能水平还没达到,不过对于以后阅读各路大神的代码,应该会帮助不少,同时跟大家首先说明一个非常重要的一点,大部分带#的处理都是在预编译阶段,比如说宏定义,预编译,包括后面说到的宏转字符串,连接记号等!

/ 该出一些套路了 /

知识点1:将宏参数转化为字符串

例如,#define BUG(a) #a 这样我们使用BUG(123)表示的就是字符串123直接可以printf(BUG(123));打印出字符串123.

知识点2:将##前后的标记进行合并

例如,#define DEBUG(a) debug##a

这样我们使用的时候int DEBUG(1)=5;其实这样就定义了一个int类型的变量debug1=5;

注意点:对于#和##号,其作为#号的参数和作为##号的参数,即使是另外一个宏也不进行展开,而是作为一个整体以字符串输出,例如,

#define debug(a,b) a##b;

#define var(c) #c

然后我们在程序中使用了var(debug(1,2)),这样我们最终输出的是debug(1,2)这个字符串表达式而不会输出12,如果我们特别想过得12,那么多定义一个宏,#define temp(d) var(d),这样就没有参数debug(1,2)没有直接对应#,最终结果就是12.

对于这两种#号实际应用中的使用,主要是简化代码,也可以说是扩展了宏定义!

审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分