宏常量、宏替换以及const 常量

一、引出

#include<stdio.h>
int main()
{
    double r;
    printf("Input r:");
    scanf("%lf",&r);
    printf("C=%f\n",2*3.14159*r);
    printf("S=%f",3.14159*r*r);
    return 0;
}

1.幻数:本题中,圆的周长和面积的计算公式中用到了圆周率Π,而Π的值再程序中是用一个常数近似表示的,像这种在程序中直接使用的常数,成为幻数。

2.幻数存在的问题:

(1)程序中使用过多的幻数使得程序的可读性变差。

(2)在程序的很多地方输入相同的幻数,很难保证不发生书写错误。

(3)当常数需要改变时,不仅工作量巨大,而且还可能遗漏。

3.解决方案:把幻数定义为宏常量或const常量,代替程序中多次出现的常数。

#include<stdio.h>
#define PI 3.14159
int main()
{
    double r;
    printf("Input r");
    scanf("%lf",&r);
    printf("C=%f",2*PI*r);
    printf("S=%f",PI*r*r);
    return 0;
}

二、宏常量

1.定义:宏常量也称为符号常量,是指用一个表示符号来表示的常量,这时该标识符号与此常量是等价的。

2.一般形式:

#define 标识符 字符串

3.作用:用#define编译预处理指令定义一个标识符和一个字符串,凡在源程序中发现该标识符时,都用其后的字符串来替代。

4.宏定义中的标识符被称为宏名,为了与源程序中的变量名有所区别,习惯用字母全部大写的单词来命名宏常量。

三、注意事项

宏定义中的宏名与字符串之间可以有多个空白符,但无需加等号,且字符串后一般不以分号结尾,因为宏定义不是C语句,而是一种编译预处理命令。

四、const 常量

1.使用宏常量最大的问题就是,宏常量没有数据类型。编译器对宏常不进行类型检查,只进行简单的字符串转换,字符串替换时极易产生意想不到的错误。这时候就需要const 常量。在声明语句中只需要把const类型修饰符放在类型名之前,即可将类型名后的标识符声明为具有该类型的const常量。由于编译器将它放在只读存储区,不允许程序中改变其值,因此const常量只能在定义时赋初值。

#include<stdio.h>
int main()
{
    double r;
    const double PI=3.14159;
    printf("Input r");
    scanf("%lf",&r);
    printf("C=%f",2*PI*r);
    printf("S=%f",PI*r*r);
    return 0;
}

2.与宏常量相比,const常量的优点在于它有数据类型,编译器能对其进行数据检查,某些集成化工具可以对const常量进行调试。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值