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

Word文档免费下载Word文档免费下载:C语言中宏_函数和Enum的优与劣 (共2页,当前第1页)

你可能喜欢

  • C语言编程
  • C语言教学设计
  • 单片机编程语言
  • 枚举类型
  • 语言类型
  • 嵌入式c语言
  • C语言经典算法
  • C语言高级

C语言中宏_函数和Enum的优与劣相关文档

最新文档

返回顶部