|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
我想问问关于宏定义的问题。首先小甲鱼书上写道“符号常量的定义格式是:#define 标识符 常量”。在小甲鱼的一道题目中代码是这样的:
#include <stdio.h>
#define INT int
#define BEGIN {
#define END }
#define PRINTF printf
#define SCANF scanf
#define ELSE else
#define IF if
INT main()
BEGIN
INT i;
PRINTF("请输入您的年龄:");
SCANF("%d", &i);
IF (i < 18)
PRINTF("您未满18周岁,不得使用这个程序!\n");
ELSE
PRINTF("您已满18周岁,欢迎使用本程序,嘿嘿嘿...\n");
return 0;
END
这里宏定义后面的标识符里面有关键字(代码是可运行的,我不知道这么弄成大佬们那样可以直接复制的那种,不好意思),可是小甲鱼说标识符的命名规律和变量名的是一样的,但是这里的标识符为什么可以是关键字呢。难道是因为大小写?然后之前的一道题目,小甲鱼的答案中是:
#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;
}
这里的宏定义中标识符为什么可以有()?如果上一个我可以理解,这个我就真的不理解了。希望大佬可以帮我解答。万分感谢
首先,我们来分析第一个问题。在这个例子中,宏定义实际上是将一些关键字映射到了其他宏标识符。这里使用宏定义是为了展示宏定义的功能,并不是一种推荐的编程实践。实际上,在实际的编程中,我们应该避免使用关键字作为宏定义的标识符。
在这个例子中,宏定义的目的是用一个新的名字来代替原来的关键字,因此宏定义的标识符可以包含关键字。但是,请注意,这并不意味着我们在实际编程中应该这样做,因为这样做会降低代码的可读性。
对于第二个问题,宏定义中的括号是用来组织宏定义表达式的。在这个例子中,S(r) 和 C(R) 定义了带有参数的宏。括号内的 r 是宏定义的参数,这意味着当我们使用这些宏时,可以传递一个参数给它们。例如,在 S(r) 和 C(r) 中,r 是一个参数。当我们调用 S(r) 和 C(r) 时,它们会被展开成相应的表达式,如下:
- S(r) => PI * r * r
- C(r) => 2 * PI * r
复制代码
这里的括号是为了将宏定义的参数与宏定义的表达式分开。在这个例子中,宏定义的括号并不违反标识符的命名规则,因为它们是用来表示带有参数的宏定义。
|
|