为什么常亮后面没有分号也出现了正确结果?
#include <stdio.h>
#define POCKETMONEY 10 //定义常量及常量值
int main()
{
//小明私自增加零花钱对吗?
printf("小明今天又得到%d元零花钱\n", POCKETMONEY);
return 0;
}
#include <stdio.h>
#define POCKETMONEY 10 //定义常量及常量值
int main()
{
//小明私自增加零花钱对吗?
printf("小明今天又得到%d元零花钱\n", POCKETMONEY);
return 0;
}
2015-07-18
因为那个#define根本就不是C语句,而这个是预处理指示。分号代表语句结束,预处理指示就是这样的格式。
在代码送给编译器编译前,会先交给预处理器,预处理器按照代码中的预处理指示对代码进行处理,再交给编译器编译。
#define POCKETMONEY 10 这一句是将代码中的POCKETMONEY替换成10(双引号中的不会被替换),所以编译器看到的代码是这样的:
printf("小明今天又得到%d元零花钱\n", 10); // 这里被替换成了10
所谓的常量就是指那个10。之所以用这种方法而不是直接在代码中写10是因为:这样做让代码更清晰,要不然你看到代码中都是10,也分不出来10到底代表什么意思。当你需要把10改成别的值的时候,只要更改#define里的这一处就可以了。
现在不推荐在代码中大量使用#define,正是因为这不是c语句,所以编译器看不到POCKETMONEY这个符号,代码有问题的话编译器也无法做到正确提示。如果你想要定义一个不想被改变的量,推荐使用const变量。
举报