老师,关于宏函数的问题

来源:5-3 宏函数

张婧仪

2023-10-20

老师,您在这小结的8分26秒处提到“在宏中,参数和返回值没有类型概念”。
代码如下:

#include <stdio.h>
#define MAX(a,b) (a)>(b)?(a):(b)
#define IS_HEX_CHARACTER(ch) \
((ch)>='0'&&(ch)<='9')|| \
((ch)>='A'&&(ch)<='F')|| \
((ch)>='a'&&(ch)<='f')
int Max(int a, int b){
  return a>b?a:b;
}
int main(){
  int max=MAX(5.555,3);
  printf("max:%d\n",max);
  printf("Is A a hex character %d\n",IS_HEX_CHARACTER('1'));
  printf("Is A a hex character %d\n",IS_HEX_CHARACTER(1));
  return 0;
}

打印结果如下:
图片描述

既然您说参数和返回值没有类型概念,那为什么
在第一个结果中,为什么打印5,而不是5.555
在二三结果中,加了单引号就打印1,不加单引号就打印0呢?

写回答

2回答

bennyhuo

2023-10-20

第二第三个,你传 '1',相当于传了个整数49,这是字符1的ascii码。所以同学再想想结果为什么跟直接传1不一样呢
0
3
bennyhuo
回复
张婧仪
是这样的。
2023-10-20
共3条回复

bennyhuo

2023-10-20

宏只是代码替换,所以你看下替换后的代码就明白了。

第一个你打印的整型max,你改成float用%f打印试试
0
2
bennyhuo
回复
张婧仪
max的类型改了吗
2023-10-20
共2条回复

C语言系统化精讲 重塑编程思想 打造坚实的开发基础

如果通向大牛的道路有捷径,那就是先学好C语言

2208 学习 · 853 问题

查看课程