我无法掌握符号和文字常量的定义和用法,我想知道你是否有人能够解释它们并突出它们之间的差异。谢谢!
答案 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.两者都可以用作表达式,但您可以使用名称来引用后者。如果您在许多地方使用相同的常量,则非常有用。