C语言中宏_函数和Enum的优与劣
C语言中宏_函数和Enum的优与劣
电脑编程技巧与维护
C语言中宏、函数和Enum的优与劣
程绍君,刘凤霞
(辽宁省北票市职教中心,北票122100)
摘要:从C语言中预处理、宏的基本概念和应用出发,对宏、函数和enum定义的枚举常量在程序设计时是否方便设计、维护和调试及效率进行了比较,归纳总结了这三者的优与劣,为程序设计的初学者扩展学习思路,加深理解预处理和宏及其应用,提高其编程能力,巩固基础知识、培养解决实际问题能力有参考意义。关键词:C语言;预处理;宏
TheAdvantageandDisadvantageofMacro、FunctionandEnuminC
Language
CHENGShaojun,LIUFengxia
(BeipiaoVacationalandEducationalCenterofLiaoning,Beipiao122100)
Abstract:ThisarticlestartswiththepretreatmentofClanguage,DefinitionandApplicationofMacro,andsummarizestheadvantagesanddisadvantageamongthembycomparingMacro,FunctionandDefinitionofEnumthatiftheprogramareeasilydesigned,protectedanddebuged,alsointheefficiencyside.Itisgoodforfreshmentoextendthethoughtofstudying,deepenthepretreatmentandapplicationofMacro,increasetheabilityofprogramdesigning,onpurposeofconsolidatingthebasicknowladge,resolvingthepraticalproblems.Keywords:Clanguage;pretreatment;Macro
对程序进行编译之前,要先运行预处理程序。预处理程序将根据源代码中的预处理指令来修改程序。预处理指令(如#define)为预处理程序提供特定的指令,告诉它应该如何修改源代码。预处理程序读入所有包含的文件和待编译的源代码,此时,宏和常量标识符已用相应的代码和值代替。如果源代码中包含条件预处理指令(如#if),预处理程序将先判断条件,然后相应地修改源代码。
main(){
intx,y;x=5;
y=SQU(++x);
printf('yis%d\n",y);}
在上例中,y究竟等于多少呢?实际上,y既不等于25(5的平方),也不等于42(6*7),而是等于49。因为变量x被作为参数传递给宏时进行了自增运算,所以上例中的SQU宏实际上是按以下形式展开的:
y=((++x)*(++x));
这样,每次引用x时,x都要自增,所以得到的结果与预期的结果相差很远,在上例中,由于x被引用了2次,而且又使用了自增运算符,因此,在展开宏的代码时,x实际上为7,将得到7的平方,而不是5的平方。
上述错误是比较常见的,因为在程序中检查这种错误是非常费劲的,所以要给予充分的注意。最好试一下上面的例子,亲眼看一下那个令人惊讶的结果值(49)。
使用宏有以下几点好处:
(1)在输入源代码时,可省去许多键入操作,而且维护程序时只需修改#define语句,不必一一修改常量的所有实例。例如,如果在程序中要多次使用PI(约3.14159),就可以象下面这样说明一个常量:
作者简介:程绍君(1970-),本科,讲师;刘凤霞(1964-),本科,高级讲师。收稿日期:2010-11-10
1定义
宏是一种预处理指令,可以用来替换源代码中的字符串,
宏是用“#define”语句定义的,下面是一个宏定义:
#defineMA"1.23"
例中这种形式所定义的宏通常被称为标识符。在上例中,——在编译预处理时,源代标识符MA即代表字符串"1.23"—
码中的每个MA标识符都将被字符串"1.23"替换掉。
以下是另一个宏定义的例子:#defineSQU(x)
((x)*(x))
例中定义了一个名为SQU的宏,它有一个参数x。SQU宏有自己的宏体,即((x)*(x))———在编译预处理时,源代码中的每个SQU(x)宏都将被((x)*(x))替换掉。
需要注意的是,在宏名和括起参数的括号之间绝对不能有空格。此外,为了避免在翻译宏时产生歧义,宏体也应该用括号括起来。例如,下文中这样定义SQU宏是不正确的。
#defineSQU(x)x*x
对传递给宏的参数也要小心,例如,一种常见的错误就是将自增变量传递给宏:
#include<stdio.h>
#includeSQU(x)(x*x)
18
2011.02
你可能喜欢
- C语言编程
- C语言教学设计
- 单片机编程语言
- 枚举类型
- 语言类型
- 嵌入式c语言
- C语言经典算法
- C语言高级
- 第十一章 PIC 单片机的 C 语言编程26页
- C语言编程命令3页
- 单片机的C语言编程---课外自学内容三92页
- 经典C语言编程100例10页
- 计算机C语言编程题10页
- 计算机二级C语言编程题库(100题)40页
- C语言程序设计教学大纲2页
- 高职C语言教学改革中教学系统的设计与实现3页
- 《C语言程序设计》教学大纲(新001)4页
- 《C语言程序设计》课程单元教学设计2页
- 滚雪球式教学方法在《C语言程序设计》教学中应用8页
- 高职院校工学结合在C语言程序设计课程教学改革5页
- 第3章 51单片机编程语言161页
- 单片机应用系统中的编程语言3页
- 各种单片机编程语言比较10页
- 第3章 51单片机编程语言92页
- 第4章_单片机的C51编程语言92页
- 浅谈单片机编程语言2页
- JAVA中的枚举类型2:高级特性2页
- JAVA中的枚举类型1:基本用法2页
- 第10章 用户定义与枚举类型15页
- 13-枚举类型4页
- 位运算与枚举类型25页
- 10_结构体_共用体_枚举类型3页
- 分析假定语从句语言类型学5页
- 第3章C语言数据类型39页
- c语言数据类型37页
- 语言类型学19页
- 第03章 C语言数据类型26页
- 单片机c语言之四数据类型6页
- C语言经典算法100例52页
- C语言经典算法100例30页
- C语言经典编程算法15页
- 数据结构经典算法 C语言版14页
- C语言经典算法100例24页
- C语言经典四种算法详解11页
- C语言高级程序设计讲座813页
- C语言高级程序设计讲座728页
- C语言高级程序设计讲座69页
- C语言高级程序设计讲座525页
- C语言高级程序设计讲座412页
- C语言高级程序设计讲座314页