关于c语言中的符号常量的问题
在小甲鱼的课程中,有一道课后习题要求定义一个符号常量为S(r),但是符号常量名不也是标识符吗?标识符的命名规律和变量的命名规律一样,而变量名必须是英文字母,数字和下划线组成的。这两者是不是有矛盾?然后我在编写代码的时候,虽然有点疑惑但是还是按照习题要求也这样命名了,也没有报错,这到底是为什么呢? S(r) 这个应该是宏定义,不是什么符号常量,把引起你疑惑的代码贴出来,大家一起学习一下嘛,不然空对空的怎么讨论。 本帖最后由 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)应该是一个标识符。 本帖最后由 jackz007 于 2022-10-20 00:11 编辑
使用 #define 定义的不是标识符,而是宏,因为它们在编译好的程序中是根本就不存在的。
这个写错了
#define C(R) 2 * PI * r
应该写成
#define C(r) 2 * PI * r
因为括号里的参数需要和后面的表达式呼应起来。在你的表达式中并没有 R ,只有 r。
有了前面的宏定义,如果在代码中出现:
area = S(a) ;
circu = C(a) ;
在代码编译的预编译阶段,编译程序会先把这 2 个表达式中的宏 PI 、S(a)、C(a) 按文本替换的方式修改成下面的样子:
area = 3.14159 * a * a ;
circu = 2 * 3.14159 * a ;
然后,才正式进行编译,这就是宏定义的作用和运行机制。 jackz007 发表于 2022-10-19 23:10
使用 #define 定义的不是标识符,而是宏,因为它们在编译好的程序中是根本就不存在的。
...
好的好的,感谢大佬
页:
[1]