关于c语言宏定义
执行以下程序后,m的值是_____#defineMIN(x,y)(x)<(y)?(x):(y)main(){inti=12,j=8,m;m=10*MIN(i,j);pri...
执行以下程序后,m的值是_____
#define MIN(x, y) (x)<(y) ? (x) : (y)
main( )
{ int i=12, j=8, m;
m=10*MIN(i, j);
printf("%d\n", m);
}
A、120 B、80 C、12 D、8
为什么是8啊,宏定义有什么特别的地方吗 展开
#define MIN(x, y) (x)<(y) ? (x) : (y)
main( )
{ int i=12, j=8, m;
m=10*MIN(i, j);
printf("%d\n", m);
}
A、120 B、80 C、12 D、8
为什么是8啊,宏定义有什么特别的地方吗 展开
2个回答
展开全部
您好!很高兴为您解答。
宏定义的用处主要体现在便于程序的调试上。
比如我要写一个计算圆相关信息(周长、面积等等)的程序,需要定义π(3.14):
#define PI 3.14
那么势必PI这个标识可以在程序中代替所有的3.14,如果我发现计算的精度不够,需要π的更多有效位时,则只需将宏定义修改为:
#define PI 3.1415926
那么程序中的所有PI都会变成3.1415926
可想而知,没有宏定义,我需要将代码中全部的3.14都手动改为3.1415926
即使是定义double PI=3.14;,你会发现当代码很长时,在乱军丛中找到一行“double PI=3.14;”是多么困难的事。
又比如数组,定义时是不能出现“int a[n];”这样的定义的,编译通不过,因为必须规定数组长度。
但如果是:
#define N 10
int a[N];
就可以,对宏定义编译器是不作检查的,应为宏定义只是简单的符号替换。所以一旦我还没有确定要定义多长的数组,但又想通过编译时,就可以提现宏定义的用处了。
如此看来,宏定义提升了程序编写的灵活性。
望采纳~如您还有不解,欢迎追问~
宏定义的用处主要体现在便于程序的调试上。
比如我要写一个计算圆相关信息(周长、面积等等)的程序,需要定义π(3.14):
#define PI 3.14
那么势必PI这个标识可以在程序中代替所有的3.14,如果我发现计算的精度不够,需要π的更多有效位时,则只需将宏定义修改为:
#define PI 3.1415926
那么程序中的所有PI都会变成3.1415926
可想而知,没有宏定义,我需要将代码中全部的3.14都手动改为3.1415926
即使是定义double PI=3.14;,你会发现当代码很长时,在乱军丛中找到一行“double PI=3.14;”是多么困难的事。
又比如数组,定义时是不能出现“int a[n];”这样的定义的,编译通不过,因为必须规定数组长度。
但如果是:
#define N 10
int a[N];
就可以,对宏定义编译器是不作检查的,应为宏定义只是简单的符号替换。所以一旦我还没有确定要定义多长的数组,但又想通过编译时,就可以提现宏定义的用处了。
如此看来,宏定义提升了程序编写的灵活性。
望采纳~如您还有不解,欢迎追问~
追问
谢谢你讲的这些,可是这道题呢
展开全部
这个MIN宏定义没有使用使用括号把定义的内容包起来,这样编译器替换后,由于运算符优先级的问题就会先计算10×12,最后结果就是8:
m=10*MIN(i, j);
编译器处理后变为:
m = 10 * 12 < 8 ? 12 : 8
这样自然就是120<8不成立,三项表达式返回的就是8。正确的定义MIN宏的方式是
#define MIN(x, y) ((x)<(y)?(x):(y))
m=10*MIN(i, j);
编译器处理后变为:
m = 10 * 12 < 8 ? 12 : 8
这样自然就是120<8不成立,三项表达式返回的就是8。正确的定义MIN宏的方式是
#define MIN(x, y) ((x)<(y)?(x):(y))
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询