c语言中的实质变量三种类型:C语言编程中的const与define常量的区别与优劣
c语言中的实质变量三种类型:C语言编程中的const与define常量的区别与优劣double fCircle = 2 * PI * fR;// 计算圆的周长其中,“宏名称”就是要定义的宏,通常用一个大写的有意义的名称来表示。“宏值”就是这个宏所代表的常量,它可以是一个常数、一个字符串,甚至是一个更加复杂的语句。比如,可以将值定义为一个宏PI:#define PI 3.14159有了常量所对应的宏,就可以在代码中使用宏来代替常量进行相应的计算。例如:
- 常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。
- 常量可以是任何的基本数据类型,比如整数常量、浮点常量、字符常量,或字符串字面值,也有枚举常量。
- 常量就像是常规的变量,只不过常量的值在定义后不能进行修改。
C语言中,常量有两种定义方式——宏常量和const常量
宏常量所谓的宏,就是将某个无明确意义的值(例如,3.14159,知道的认为是圆周率,不知道的认为是某个奇怪的数字),定义为某个有明确意义的标识符(例如,PI,所有人都会认为是圆周率)。然后,就可以在代码中使用这个有意义的标识符,从而使代码更具可读性。
在C/C 中,可以使用#define预编译指令来定义一个宏:
#define 宏名称 宏值
其中,“宏名称”就是要定义的宏,通常用一个大写的有意义的名称来表示。“宏值”就是这个宏所代表的常量,它可以是一个常数、一个字符串,甚至是一个更加复杂的语句。比如,可以将值定义为一个宏PI:
#define PI 3.14159
有了常量所对应的宏,就可以在代码中使用宏来代替常量进行相应的计算。例如:
// 计算圆的周长
double fCircle = 2 * PI * fR;
// 计算圆的面积
double fArea = PI * fR * fR;
这里,使用了PI宏代替了原本应该使用的常量3.14159。宏的本质是一种替代。当预编译程序在处理源代码时,如果发现代码中使用了宏,就会用宏的值来代替宏。例如,上面的代码会被分别修改为
// 宏替换后的代码
const常量虽然宏的使用可以带来便利,但是因为它是在预处理的时候进行无条件的替换,并没有明确指定这个常量的数据类型,所以带来便利的同时也容易带来问题。C/C 使用另一种更加稳妥的方法来代替宏的这一功能,这就是const关键字。 变量的值是可以修改的,可以在定义变量的时候加上const关键字,让变量的值不可修改,从而成为常量。const关键字的使用格式如下:
const 数据类型 常量名 = 常量值;
相比于变量的声明方式,我们只是在数据类型前加了const关键字,该关键字告诉编译器这条语句所定义的变量的值是不可修改的,也就是说,该变量可以当成常量来使用。需要注意的是,因为常量的值不可以修改,所以必须在定义常量的同时完成它的赋值。例如:
// 定义常量PI
const double PI = 3.14159;
使用const的常量一经定义后,就不能再进行修改,否则会产生编译错误。例如,如果想在程序中降低PI的精度,偷工减料是不行的,例如:
// 不能修改const常量的值
PI = 3.141;
这样给一个const修饰的变量赋值是不行的。正是编译器检查变量赋值,使得我们无法对const修饰的变量进行赋值,从而也就无法改变这个变量的值。既然变量的值无法改变,那么这个变量也就成了常量。 既然宏和const关键字都可以用来给常量一个名分,那么该如何选择呢?到底是用宏还是用const关键字?应该更多地使用const关键字。比如,要定义PI这个常量,可以采用以下两种方式:
// 宏方式
#define PI 3.14159
// const方式
const double PI = 3.14159;
这两种方式在语法上都是合法的,但是第二种方式要比第一种方式好,因为如果使用#define定义宏,PI会在代码的预编译阶段被预编译处理器替换成3.14159,宏的名称不会出现在符号表中,这样会给代码后期的调试带来麻烦,可能会遇到一个数字,却不知道它从何而来,这就是我们常说的Magic Number(像拥有魔力一样不知从何而来的数)。使用const定义,既可以保证PI值的唯一性,又便于调试,同时还可以对数据类型进行检查,借助编译器来减少错误的发生。所以,我们总是优先使用const关键字来定义常量。
最后初学者有什么不懂的可以私信我,需要系统学习资料和系统学习框架图的同学,可关注小编头条号,欢迎留言评论和私信小编。【私信方法】文章上方处点击“作者头像”,进入作者首页,在作者主页上方点击“关注”旁边的“发私信”即可。私信内容:学习帮助。
喜欢小编的文章的朋友可以关注、收藏、转发、留言。祝大家阅读愉快!!