## 1.4 Symbolic Constants 符号常量

A final observation before we leave temperature conversion forever. It's bad practice to bury "magic numbers" like 300 and 20 in a program; they convey little information to someone who might have to read the program later, and they are hard to change in a systematic way. One way to deal with magic numbers is to give them meaningful names. A #define line defines a symbolic name or symbolic constant to be a particular string of characters:

`  #define name replacement list`

Thereafter, any occurrence of name (not in quotes and not part of another name) will be replaced by the corresponding replacement text. The name has the same form as a variable name: a sequence of letters and digits that begins with a letter. The replacement text can be any sequence of characters; it is not limited to numbers.

```   1    #include <stdio.h>
2
3    #define LOWER  0     /* lower limit of table */
4    #define UPPER  300   /* upper limit */
5    #define STEP   20    /* step size */
6
7    /* print Fahrenheit-Celsius table */
8    main()
9    {
10        int fahr;
11
12        for (fahr = LOWER; fahr <= UPPER; fahr = fahr + STEP)
13            printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32));
14    }
```

The quantities LOWER, UPPER and STEP are symbolic constants, not variables, so they do not appear in declarations. Symbolic constant names are conventionally written in upper case so they can ber readily distinguished from lower case variable names. Notice that there is no semicolon at the end of a #define line.

`#define 名字 替换文本`

```   1 #include <stdio.h>
2
3 #define LOWER  0     /* lower limit of table */
4 #define UPPER  300   /* upper limit */
5 #define STEP   20    /* step size */
6
7 /* print Fahrenheit-Celsius table */
8 main()
9 {
10     int fahr;
11
12     for (fahr = LOWER; fahr <= UPPER; fahr = fahr + STEP)
13         printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32));
14 }
```

TCPL/1.04_Symbolic_Constants (last edited 2008-02-23 15:37:01 by localhost)

ch3n2k.com | Copyright (c) 2004-2022 czk.