c语言中宏定义

c语言中宏定义

ID:22011848

大小:78.50 KB

页数:12页

时间:2018-10-26

c语言中宏定义_第1页
c语言中宏定义_第2页
c语言中宏定义_第3页
c语言中宏定义_第4页
c语言中宏定义_第5页
资源描述:

《c语言中宏定义》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、http://dragonw.blog.hexun.com/24994073_d.html   C语言中的宏定义    14.3 宏定义我们从第2章以来使用的宏被称为简单的宏,它们没有参数。预编译器也支持带参数的宏。本节会先讨论简单的宏,然后再讨论带参数的宏。在分别讨论它们之后,我们会研究一下二者共同的特性。14.3.1 简单的宏简单的宏定义有如下格式:[#define指令(简单的宏)]  #define 标识符替换列表替换列表是一系列的C语言记号,包括标识符、关键字、数、字符常量、字符串字面量、运算符和标点符号。当预处理器遇到一个宏定义时,会做一个“标识符

2、”代表“替换列表”的记录。在文件后面的内容中,不管标识符在任何位置出现,预处理器都会用替换列表代替它。不要在宏定义中放置任何额外的符号,否则它们会被作为替换列表的一部分。一种常见的错误是在宏定义中使用=:#defineN=100     /***WRONG***/inta[N];           /*会成为inta[=100];*/在上面的例子中,我们(错误地)把N定义成一对记号(=和100)。在宏定义的末尾使用分号结尾是另一个常见错误:#defineN100;      /***WRONG***/inta[N];           /*   beco

3、meinta[100;];*/这里N被定义为100和;两个记号。在一个宏定义中,编译器可以检测到绝大多数由多余符号所导致的错误。但不幸的是,编译器会将每一处使用这个宏的地方标为错误,而不会直接找到错误的根源——宏定义本身,因为宏定义已经被预处理器删除了。简单的宏主要用来定义那些被Kernighan和Ritchie称为“明示常量”(manifestconstant)的东西。使用宏,我们可以给数值、字符和字符串命名。#defineSTE_LEN80#defineTRUE    1#defineFALSE   0#definePI       3.14159#de

4、fineCR       'r'#defineEOS      ''使用#define来为常量命名有许多显著的优点:l程序会更易读。一个认真选择的名字可以帮助读者理解常量的意义。否则,程序将包含大量的“魔法数”,使读者难以理解。l程序会更易于修改。我们仅需要改变一个宏定义,就可以改变整个程序中出现的所有该常量的值。“硬编码的”常量会更难于修改,特别是有时候当他们以稍微不同的形式出现时。(例如,如果一个程序包含一个长度为100的数组,它可能会包含一个从0到99的循环。如果我们只是试图找到所有程序中出现的100,那么就会漏掉99。)l可以帮助避免前后不一致

5、或键盘输入错误。假如数值常量3.14159在程序中大量出现,它可能会被意外地写成3.1416或3.14195。虽然简单的宏常用于定义常量名,但是它们还有其他应用。l可以对C语法做小的修改。实际上,我们可以通过定义宏的方式给C语言符号添加别名,从而改变C语言的语法。例如,对于习惯使用Pascal的begin和end(而不是C语言的{和})的程序员,可以定义下面的宏:#defineBEGIN {#defineEND   }我们甚至可以发明自己的语言。例如,我们可以创建一个LOOP“语句”,来实现一个无限循环:#defineLOOP  for(;;)当然,改变C语

6、言的语法通常不是个好主意,因为它会使程序很难被其他程序员所理解。l对类型重命名。在5.2节中,我们通过重命名int创建了一个Boolean类型:#defineBOOLint虽然有些程序员会使用宏定义的方式来实现此目的,但类型定义(7.6节)仍然是定义新类型的最佳方法。l控制条件编译。如将在14.4节中看到的那样,宏在控制条件编译中起重要的作用。例如,在程序中出现的宏定义可能表明需要将程序在“调试模式”下进行编译,来使用额外的语句输出调试信息:#defineDEBUG这里顺便提一下,如上面的例子所示,宏定义中的替换列表为空是合法的。当宏作为常量使用时,C程序员

7、习惯在名字中只使用大写字母。但是并没有如何将用于其他目的的宏大写的统一做法。由于宏(特别是带参数的宏)可能是程序中错误的来源,所以一些程序员更喜欢使用大写字母来引起注意。其他人则倾向于小写,即按照Kernighan和Ritchie编写的TheCProgrammingLanguage一书中的样式。14.3.2 带参数的宏带参数的宏定义有如下格式:[#define指令—带参数的宏]  #define标识符(x1,x2,…,xn)替换列表其中x1,x2,…,xn是标识符(宏的参数)。这些参数可以在替换列表中根据需要出现任意次。在宏的名字和左括号之间必须没有空格。如

8、果有空格,预处理器会认为是在定义一个简单的宏,其中(

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。