学海网 文档下载 文档下载导航
设为首页 | 加入收藏
搜索 请输入内容:  
 导航当前位置: 文档下载 > 所有分类 > IT/计算机 > C语言中宏_函数和Enum的优与劣

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

第1页

TOP相关主题

  • c语言中宏定义
  • c语言enum
  • c语言函数
  • c语言函数大全
  • c语言随机函数
  • c语言三角函数
  • c语言自定义函数
  • c语言字符串函数

我要评论

相关文档

  • 【论文】C语言中宏函数和Enum的优与劣

    C语言中宏函数和Enum的优与劣_专业资料。从C语言中预处理、宏的基本概念和应用出发,对宏、函数和enum定义的枚举常量在程序设计时是否方便设计、维护和调试及...

  • C语言中宏的使用(1)

    C语言中宏定义技巧 5页 免费 对C语言中宏定义的研究 2页 免费 C语言中宏_函数和Enum的优... 2页 免费 C语言中宏定义的用法与意义... 暂无评价 20页 5...

  • C语言中宏的剖析

    C语言中宏_函数和Enum的... 2页 免费 浅析C语言中宏定义的使用... 暂无...第 抖 卷第期月年 曲《〕 靖 师 范 学 院 学 报五只 对 语言 中宏 的...

  • C语言中宏的使用 (2)

    C语言中宏_函数和Enum的... 2页 免费 C语言中宏定义的用法与意... 暂无...C语言中宏的使用 收藏 关于#和## 在C语言的宏中,#的功能是将其后面的宏...

  • C语言中宏定义技巧

    C语言中宏定义技巧_IT/计算机_专业资料。C 语言宏定义方法总结 语言宏定义方法...{a, #a} enum IDD{OPEN, CLOSE}; typedef struct MSG{ IDD id; const ...

  • 浅析C语言中宏定义的使用

    浅析C语言中宏定义的使用_计算机软件及应用_IT/计算机_专业资料。在程序调试时...我们可以定义一个DbgPrintf的函数来专门处理这些事情,只在DbgPrintf函数内放上#...

  • C语言中宏定义的用法与意义

    {a, #a} enum IDD{OPEN, CLOSE}; MSG{ typedef struct IDD const }MSG;... C语言函数的定义及使用 7页 免费 对C语言中宏定义的研究 2页 免费 C语言中...

  • C语言的32个关键字和9种控制语句

    声明长整型变量或函数 switch :用于开关语句 case:开关语句分支 enum :声明枚举...C 语言的 32 个关键字和 9 种控制语句 C 语言的关键字共有 32 个,根据...

  • C语言复合函数4

    C语言 第4章 函数 29页 免费 第4章 C语言, 函数 72页 免费 第4章 (C...定义类型形式 :enum 名字{枚举列表} 变量表; 定义变量形式(三种方式)枚举类型...

  • C语言函数大全-f开头-完整版

    C语言函数大全-f开头-完整版_IT/计算机_专业资料。C语言函数大全-f开头-完整...enum fill_patterns { /* Fill patterns for get/setfillstyle */ 0 EMPTY_...

站点地图 | 文档上传 | 侵权投诉 | 手机版
新浪认证  诚信网站  绿色网站  可信网站   非经营性网站备案
本站所有资源均来自互联网,本站只负责收集和整理,均不承担任何法律责任,如有侵权等其它行为请联系我们.
文档下载 Copyright 2013 doc.xuehai.net All Rights Reserved.  email
返回顶部