百摩网
当前位置: 首页 生活百科

宏程序的各种参数及设置(每个代码工程都在使用的宏定义)

时间:2023-07-12 作者: 小编 阅读量: 2 栏目名: 生活百科

最后一个#define定义了一种简短记法,以便在switch语句中使用。也就是说,宏与类型无关。和函数相比的话,宏也是有缺点的,不利之处就在于每次使用宏时,一份宏定义的代码都将重新拷贝并插入程序中,除非宏非常短,否则使用宏可能会大幅度增加程序的长度。

1、前言

编译一个C程序的第一个步骤被称为预处理,也就是在源代码编译之前对其进行一些文本替换的操作,而一个常见的约定是把宏名字全部大写(用以区分宏和函数,因为在某些场合我们会以宏的形式来实现函数的功能)。

2、宏的常用场合

为了便于一些通用代码模板的维护与扩展,我们在实际开发中会经常使用宏定义。使用#define指令,你可以把任何文本替换到程序中。这里有几个例子:

第1个定义只是为关键字register创建了一个简短的别名。第2个定义用一个更具描述性的符号来代替一种用于实现无限循环的for语句类型。最后一个#define定义了一种简短记法,以便在switch语句中使用。它自动的把一个break放在每个case之前,原因在于在switch语句中,不遇到break就不会主动退出,一直到语句执行完毕,而很多人常常会在case分支忘记加上break。值得注意的是,如果定义中的语句非常长,它可以分成几行,除了最后一行之外,每行的末尾都要加上一个反斜杠,如下所示:

3、宏与函数

宏非常频繁的用于执行简单的计算,比如在两个表达式中寻找较大(或较小)的一个:

为什么不用函数来完成这个任务呢?有两个原因。首先,用于调用和从函数返回的代码很可能比实际执行这个小型计算工作的代码更大,所以使用宏比使用函数在程序的规模和速度方面都更胜一筹。但是,更为重要的是,函数的参数必须声明为一种特定的数据类型,所以它只能在类型合适的表达式上使用。反之,上面这个宏可以用于整型、长整型,浮点型以及其他任何可以用‘>’操作符比较大小的类型。也就是说,宏与类型无关。和函数相比的话,宏也是有缺点的,不利之处就在于每次使用宏时,一份宏定义的代码都将重新拷贝并插入程序中,除非宏非常短,否则使用宏可能会大幅度增加程序的长度。

正如上面所说,宏与函数不同,宏在连续几个调用中所接收的参数类型可以不同,只是简单的对字符串进行替换而已。特别需要注意的一点是:在宏的扩展中,空格会对扩展的结果造成很大的影响,示例如下:

被扩展为:

而:

则被扩展为:

造成的结果是:他们所表示的意思天差地别(没有看明白的小伙伴欢迎在评论区交流哦)。

另外给大家补充一个小技巧,平常工作的开发中不一定用得到,理解这个思想就行。如下:Steve Bourne在编写UNIX第七版的shell(命令解释器)时,采用了C预处理器(也就是宏#define)使C语言看上去更像是shell编程里的风格,shell编程代码中有显示的“结束语句”提示,诸如if...fi或者case...esac等,调试起来会更容易。Steve认为仅仅一个“}”是不够的,因此他建立了一批宏定义如下:

这样,就可以像下面这样编写代码:

再看一下相应的C代码:

本文章结束之前提一个小问题:上图中的C代码是否有错呢?如果有错的话错在哪?没错的话为什么在函数名和函数体之间有奇怪的s1和s2的声明?欢迎在评论区交流。

请关注笔者,后续会定期更新C编程相关知识和技巧,我们一起学习一起进步。

    推荐阅读
  • skt与kt的恩怨情仇(SKT和KT竟有这样的渊源)

    在后来的2014全球总决赛OGN赛区选拔赛中,SKTT1K又被状态爆棚的NajinShield击败,彻底无缘世界赛。随后的2015赛季,SKT卷土重来,夏季赛决赛,他们再次遇到了此前让自己跌落低谷的KT。拿到了S5冠军奖杯的SKT在接下来的2016赛季并没有被冠军魔咒所笼罩。事实上,KT即便输给了SKT仍旧是有晋级S6的机会的,但不幸的是,在决赛中,他们被一年来进步巨大的ROX拦了下来。被誉为世界第一上单的Smeb,EDG的两个大腿Pawn和Deft,加上拥有团队大脑之称的Mata。

  • 游泳比赛的出发方式蹬壁或跳发之后如何出水不减慢速度(蹬壁出发之后如何出水不减速)

    游泳比赛的出发方式蹬壁或跳发之后如何出水不减慢速度触壁——运动员在最后一次蹬腿结束、不减速地游近池壁,两臂前伸,在正前方高于身体重心的地方触壁。转身——触壁后,全手掌压池壁,随着惯性屈肘、屈膝团身,同时身体沿纵轴向左侧转动,并抬头吸气,左手离开池壁在水中随着身体向左侧转动并逐渐向左前伸。

  • 沙姜的功效与作用(功效非常之多)

    沙姜的功效与作用行气止痛。中医常说,通则不痛,痛则不通,这告诉我们当体内气流不畅时,人体就会感觉到疼痛。沙姜独特的香气和辛辣味道能够促进唾液分泌,增进食欲,起到健脾和胃的作用。故有食欲不振的人群可经常食用。沙姜性质温和,有温中的作用,可用于治疗胃寒、心腹冷热等寒症。将沙姜与麝香均研磨弄碎,混合擦在牙痛的位置,后清水漱口,坚持一段时间,可起到治疗牙痛的作用。

  • 2023绍兴诸暨西施珍珠嘉年华音乐节入场须知

    每券一人,无副券作废,门票仅限单次使用。于郑旦路上进行安检,检票后进入音乐节主会场。入场时请确认演出的时间、地点,当天13:00检票及入场,20:30起停止检票及入场。门票售出,恕不退换。入场身份验证仅限一次使用,中途离场后将无法入场。此类未能携带入场的物品将被留置于安检区。主办方有权没收此类违禁物品并予以处置。

  • 黑魂3黑骑士盾哪里刷(黑魂3银骑士盾哪里刷)

    在黑暗之魂3中黑骑士盾是一个非常不错的盾牌,这个盾主要靠击杀黑骑士获得,那么该怎么刷黑骑士盾呢下面一起来看看吧。黑魂3黑骑士盾哪里刷黑骑士盾出处介绍1、第一个位置就是法兰要塞,黑骑士一套+盾+大剑都会出。无论结局如何,世界始终会在光与暗之间轮转。

  • 我叫什么名字用英语怎么说(我叫什么名字英语表达)

    词汇分析,我来为大家科普一下关于我叫什么名字用英语怎么说?以下内容希望对你有帮助!我叫什么名字用英语怎么说我叫什么名字英语:Whatsmyname?词汇分析whatpron.什么,多少;…m]美[nem]n.名字;名声;有…名称的;著名的人物。vt.确定;决定;给…adj.著名的;据以取名。

  • 湖北警官学院2022寒假放假时间 湖北警官学院什么时候放暑假

    湖北警官学院2022寒假放假时间全院学生2022年1月15日放赛假,总教学周数19周。全院各年级学生2022年2月19日、20日报到,2月21日正式上课。寒假疫情防控1.保持良好卫生习惯,勤洗手,保持手卫生,咳嗽、打喷嚏时用纸巾或曲肘捂住口鼻,防止飞沫传播。保持作息时间规律、充足睡眠。

  • 深宅大结局(人物最终结局)

    以下内容大家不妨参考一二希望能帮到您!深宅大结局王艳佳试图从张家赢的嘴里探听到张家制茶密集的下落,得到的确是秘籍已被销毁的消息,同时还发现了跟踪他的李大夫。

  • 老鸭跟什么煲汤最佳(13道滋补养气老鸭汤)

    3、砂锅内倒入水,烧开火。2、鸭块焯出血沫后捞出,洗净。

  • 璧组词(璧读音及解释)

    我们一起去了解并探讨一下这个问题吧!璧组词“璧”组词:和氏璧、完璧归赵、中西合璧、珠联璧合、白璧微瑕、璧还、拱璧、合璧、秦璧、璧晖、珪璧、珠残璧碎、点璧、当璧、璧马、家骥人璧、合璧之光、束帛加璧、璧除、履璧、视同拱璧、璧翣、璧联、璧日、捐金抵璧、反璧、白璧瑕、轩璧、璧流、璧门、珠连璧合、璧圭、琼璧、拜璧、珠璧、怀璧、楚璧隋珍、璧堂、金璧、璧水。