
上QQ阅读APP看书,第一时间看更新
4.4.3 显式地定义某种类型的常量
C语言提供了一种较为稳妥的方式,让我们能够定义带有名称的常量(named constant,也叫作具名常量或命名常量)。这种方式跟定义变量时所采用的写法类似,只不过前面要加上const关键字,也就是要写成:const type identifier=value;。其中type、identifier与value都跟声明变量时类似,区别只在于,我们声明常量时总是应该指出它的初始值,而不像声明变量时那样,可以先不指定初始值,稍后再去赋值。由于常量的值在程序执行完声明该常量的那条语句之后就不能再变化了,因此假如我们不给它指定初始值,那以后就没有办法再指定了。所以说,未指定初始值的常量是没有意义的。
用这种方式声明的常量是带有名称的,而且具备类型及取值,这个取值不能修改。4.4.2节的那段代码,换用这种方式来写,会变成下面这样:

这种写法比采用预处理指令更稳妥,因为编译器已经知道了这些常量的类型,如果我们所写的代码没有正确使用该常量,或者想对它做某种无效的类型转换操作,那么编译器就会报错。
给常量名加字母k作前缀并不是一项强制的要求,你也可以不加。还有一种命名习惯,是给常量的名称加Const后缀,例如把刚才那段代码中的两个常量分别命名为inchesPerFootConst与feetPerYardConst。当然,你也可以既不加前缀,也不加后缀,而是直接写成inchesPerFoot与feetPerYard。无论怎么写,只要你在常量已经初始化之后继续给它赋值,编译器就会报错。