- C语言学习指南:从规范编程到专业级开发
- (美)杰夫·苏哈伊
- 482字
- 2025-02-23 15:03:29
4.4.2 用预处理指令定义常量值
还有一种定义常量的办法是采用#define这个预处理指令来做。该指令的格式为#define symbol text,其中的symbol是一个标识符,text可以是字面常量,也可以是早前已定义过的某个symbol。为了跟普通代码里面的变量名相区分,symbol的名称通常采用全大写的形式,单词之间用下划线连接。
我们举例说明。该例采用预处理指令来定义每英尺的英寸数(也就是1英尺相当于多少英寸),以及每码的英尺数(也就是1码相当于多少英尺):

在编译程序的过程中,编译器会在预处理环节对#define指令所定义的常量做文本替换(textural substitution)。定义这些常量符号的时候,我们没有指出常量值的类型,编译器也不会去验证我们在程序代码中对这个符号的用法是否合理。因此,笔者不建议你采用这种方式定义常量。之所以讲解这种方式,是因为许多旧式的C程序可能频繁使用该机制来定义常量。
由于#define指令能够做文本替换,因此除了用来定义常量,它还有许多用途。这是一个相当强大的功能,如果你真的要用,那就必须特别小心,以免滥用或误用。以前有许多因素促使我们依赖#define这样的预处理指令,但这些因素现在基本上都消失了。至于如何恰当地使用预处理指令,那应当会在更为高级的编程课里面讲解。