C中文字和符号常量的区别和定义?

时间:2011-01-03 14:21:15

标签: c constants

我无法掌握符号和文字常量的定义和用法,我想知道你是否有人能够解释它们并突出它们之间的差异。谢谢!

4 个答案:

答案 0 :(得分:4)

符号是编译器处理的内容。编译器几乎以处理变量的方式处理const。另一方面,#define是编译器甚至不知道的东西,因为预编译器将其转换为其值。这就像搜索和替换。如果你这样做

#define A 5

然后

b += A;

预编译器将其转换为

b += 5;

并且所有编译器看到的是数字5。

答案 1 :(得分:4)

文字常量是直接在程序中输入的值,无论何时需要。例如

int tempInt = 10;

tempInt是int类型的变量; 10是文字常数。您无法将值分配给10,并且无法更改其值。符号常量是由名称表示的常量,就像表示变量一样。但是,与变量不同,在初始化常量后,其值不能更改。

如果您的程序有一个名为学生和另一个命名类的整数变量,如果您知道每个班级有15名学生,您可以根据已知数量的课程计算您有多少学生:

students = classes * 15;

答案 2 :(得分:1)

(借用之前的帖子) 文字常量是直接在您的程序中输入的值,无论何时需要。例如

int breakpoint = 10;

变量断点是一个整数(int); 10是文字常数。您无法将值指定为10,并且无法更改其值。与变量不同,常量在被赋值(初始化)后无法更改。

符号是编译器处理的内容。在此示例中,TEN是使用#define函数创建的符号常量。 #define是编译器甚至不知道的东西,因为预编译器将其转换为其分配的(已定义的)值。预编译器搜索并用值替换程序中的每个符号常量。

#define TEN 10      /* These two lines of code become one... */
breakpoint  +=  TEN;    /* after running through the precompiler  */

预编译器将其转换为

Breakpoint  +=  10;

编译器永远不会看到TEN,只看到它的指定值10.为什么这有用?如果断点更改为11该怎么办。不是查看整个程序并将每个变量定义更改为使用文字常量10设置的新值,而是将单个符号的定义常量... TEN更改为11并且让预编译器为您做更改。

答案 3 :(得分:0)

我认为你的意思是文字常量是一个原始表达式,如“string”或2或false,而象征性是当你给它一个名字,如const int MagicNumber = 42.两者都可以用作表达式,但您可以使用名称来引用后者。如果您在许多地方使用相同的常量,则非常有用。