鱼C论坛

 找回密码
 立即注册
查看: 4059|回复: 4

关于c语言中的符号常量的问题

[复制链接]
发表于 2022-10-19 15:05:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在小甲鱼的课程中,有一道课后习题要求定义一个符号常量为S(r),但是符号常量名不也是标识符吗?标识符的命名规律和变量的命名规律一样,而变量名必须是英文字母,数字和下划线组成的。这两者是不是有矛盾?然后我在编写代码的时候,虽然有点疑惑但是还是按照习题要求也这样命名了,也没有报错,这到底是为什么呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-10-19 15:10:39 | 显示全部楼层
        S(r) 这个应该是宏定义,不是什么符号常量,把引起你疑惑的代码贴出来,大家一起学习一下嘛,不然空对空的怎么讨论。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-19 22:46:29 | 显示全部楼层
本帖最后由 onlyyyr 于 2022-10-19 22:47 编辑
jackz007 发表于 2022-10-19 15:10
S(r) 这个应该是宏定义,不是什么符号常量,把引起你疑惑的代码贴出来,大家一起学习一下嘛,不然 ...


#include <stdio.h>

#define PI 3.14159
#define S(r) PI * r * r
#define C(R) 2 * PI * r

int main()
{
        int r = 5;

        printf("半径为%d的圆,面积是:%.2f,周长是:%.2f\n", r, S(r), C(r));

        return 0;
}
大佬你看看呢,按照小甲鱼书上的,符号常量的定义格式是:#define  标识符  常量。所以这里的S(r)应该是一个标识符。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-19 23:10:50 | 显示全部楼层
本帖最后由 jackz007 于 2022-10-20 00:11 编辑

        使用 #define 定义的不是标识符,而是宏,因为它们在编译好的程序中是根本就不存在的。

        这个写错了
  1. #define C(R) 2 * PI * r
复制代码

        应该写成
  1. #define C(r) 2 * PI * r
复制代码

        因为括号里的参数需要和后面的表达式呼应起来。在你的表达式中并没有 R ,只有 r。

        有了前面的宏定义,如果在代码中出现:
  1.         area = S(a) ;
  2.         circu = C(a) ;
复制代码

        在代码编译的预编译阶段,编译程序会先把这 2 个表达式中的宏 PI 、S(a)、C(a) 按文本替换的方式修改成下面的样子:
  1.         area = 3.14159 * a * a ;
  2.         circu = 2 * 3.14159 * a ;
复制代码

        然后,才正式进行编译,这就是宏定义的作用和运行机制。      
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-24 17:57:00 | 显示全部楼层
jackz007 发表于 2022-10-19 23:10
使用 #define 定义的不是标识符,而是宏,因为它们在编译好的程序中是根本就不存在的。

        ...

好的好的,感谢大佬
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-23 04:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表