帮看下这个程序

来源:百度知道 编辑:UC知道 时间:2024/05/16 16:29:10
#define sqr(n) n*n
main()
{
printf("%d\n",27/sqr(3));
}
为什么结果是27而不是3

define是直接将sqr(n)代换成n*n
27/sqr(3)变成
27/3*3

改成
#define sqr(n) n*n
main()
{
int m = 27 / sqr(3);
printf("%d\n",m);
}
然后想想什么问题

sqr(3),3的3次方?

宏定义在编译 的时候进行宏展开,所以27/sqr(3)) 就等于 27/ 3*3 所以还是 27,从左到右算 ;
应该这样 #define sqr(n) (n*n) 定义宏才对,加括号出错的概率小点