重庆邮电大学论坛

 找回密码
 注册(开放注册)
搜索
查看: 13776|回复: 0
打印 上一主题 下一主题

[计算机类] 不带参数的宏在使用过程中的注意事项!

[复制链接]
跳转到指定楼层
1#
发表于 2006-10-28 10:05:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
宏的定义形式为: #define 宏名 宏体

要注意以下几点:

1、书写时,#define与宏名之间、宏名与宏体之间均以(一个或多个)空格隔开,也即从宏名后的第一个非空格字符开始,直到本行结束之间的符号均作为宏体看待,看下面的例子:


  若宏替换命令行后面加了分号,则该分号将成为宏体的一部分。
   如:#define N 8;
  则宏体应该是8;(分号也包括在内!)
  这时,如果遇到语句
    for(i=0;i<N-1;i++){...}
  则宏替换后的形式为:
    for(i=0;i<8;-1;i++){...}
  该程序在编译时将无法通过,问题也很难查出来。
  切记:定义宏的时候,宏体后面千万不要加分号,除非你本来就需要在宏体中加入这个分号!


2、宏替换过程
  在进行宏替换时,要注意将宏名按定义时宏体的形式原封不动地代入表达式中,不要增加任何其他的符号(尤其是小括号!),看下面的例子:

  有如下程序
  #define N 2
  #define M N+1
  #define NUM 2*M+1
  main()
  {
   int i;
   for(i=1;i<=NUM;i++) printf("%d\n",i);
  }
  则该程序中for循环执行的次数是
  A)5  B)6  C)7  D)8

  为获得宏名NUM的替换结果,先将宏名M的宏体N+1替换进去,得到NUM的形式为:2*N+1+1,注意不能给M的宏体N+1随意加小括号,写成2*(N+1)+1,这是最容易犯的错误!!然后将N的宏体替换进去,最后得到NUM的形式为2*2+1+1,该表达式的值为6,因此上述题目的正确答案为(B)。这是2000年9月二级C中的一道选择题。
  切记:在进行宏替换时,不要随意给宏体加上小括号,除非宏定义中本身就有小括号!

3、宏体不被替换的情况

(1) 双引号中的与宏名相同的字符串将不被替换;
(2) 用户标识符中只有一部分与宏名相同的字符串将不被替换。

 如有宏定义 #define PI 3.1415926
 则:语句 printf("PI is 3.14");和 int myPI;中的"PI"均不被作为宏名而替换。

您需要登录后才可以回帖 登录 | 注册(开放注册)

本版积分规则

手机访问本页请
扫描左边二维码
         本网站声明
本网站所有内容为网友上传,若存在版权问题或是相关责任请联系站长!
站长电话:0898-66661599    站长联系QQ:7123767   
         站长微信:7123767
请扫描右边二维码
www.jtche.com

小黑屋|手机版|Archiver|重庆邮电大学论坛 ( 琼ICP备10200388号-8 )

GMT+8, 2024-4-28 23:26 , Processed in 0.223260 second(s), 15 queries .

Powered by 校园招聘信息

© 2001-2020 重庆邮电大学论坛校园招聘

快速回复 返回顶部 返回列表