为什么常亮后面没有分号也出现了正确结果?

来源:2-7 不可改变的常量

qq_一场游戏一场梦_2

2015-07-18 11:58


#include <stdio.h>

#define POCKETMONEY 10    //定义常量及常量值

int main()

{

//小明私自增加零花钱对吗?

    printf("小明今天又得到%d元零花钱\n", POCKETMONEY);

    return 0;  

}


写回答 关注

2回答

  • onemoo
    2015-07-18 13:37:25
    已采纳

    因为那个#define根本就不是C语句,而这个是预处理指示。分号代表语句结束,预处理指示就是这样的格式。

    在代码送给编译器编译前,会先交给预处理器,预处理器按照代码中的预处理指示对代码进行处理,再交给编译器编译。

    #define POCKETMONEY 10 这一句是将代码中的POCKETMONEY替换成10(双引号中的不会被替换),所以编译器看到的代码是这样的:

    printf("小明今天又得到%d元零花钱\n", 10); // 这里被替换成了10


    所谓的常量就是指那个10。之所以用这种方法而不是直接在代码中写10是因为:这样做让代码更清晰,要不然你看到代码中都是10,也分不出来10到底代表什么意思。当你需要把10改成别的值的时候,只要更改#define里的这一处就可以了。

    现在不推荐在代码中大量使用#define,正是因为这不是c语句,所以编译器看不到POCKETMONEY这个符号,代码有问题的话编译器也无法做到正确提示。如果你想要定义一个不想被改变的量,推荐使用const变量。

    qq_一场游...

    谢谢

    2015-07-29 20:39:57

    共 1 条回复 >

  • qq_一场游戏一场梦_2
    2015-07-18 11:58:57

    加上分号反而错了

C语言入门

C语言入门视频教程,带你进入编程世界的必修课-C语言

926028 学习 · 20793 问题

查看课程

相似问题