其他
c语言冷门小知识之#号
/***常规出牌,首先聊一聊***/
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.
对于这两种#号实际应用中的使用,主要是简化代码,也可以说是扩展了宏定义!好了欢迎各位关注最后一bug,我们下期再见!