为了账号安全,请及时绑定邮箱和手机立即绑定

关于类函数宏

关于类函数宏

C
qq_不睡觉的怪叔叔_0 2016-08-30 09:25:34
#include<stdio.h>#define SQUARE(X) ((X)*(X))#define PR(X) printf("The result is %d.\n", X)int main(){ int x=4; PR(SQUARE(++x)); return 0;}为什么结果是36呢?
查看完整描述

1 回答

?
Yexiaomo

TA贡献152条经验 获得超157个赞

这个 你可以 仔细再看看书.

#include<stdio.h>
#define SQUARE(X) ((X)*(X))  //等价于 SQUARE(++x)   ( (++x) )* ( (++x) )
#define PR(X) printf("The result is %d.\n", X)
int main()
{
	int x = 4;
	PR( SQUARE( ++x ) );
	
	return 0;
}

你看第 7 行代码, 括号最里面有   ++x    

在计算 SQUARE(++x)  因为这是宏定义, 所以 直接把  参数   ++x  传送,   

所以  再运算    ( (++x) )* ( (++x) )

所以  SQUARE( ++x )  结果就是 36, 

接着 PR( SQUARE( ++x ) ), 打印输出   The result is 36 .

-------------------------------------------------------分割线---------------------------------------------------------------

另附: 这个 宏定义 的参数 和 平时所写的 函数, 不一样,  

程序运行 是 会将 头文件, denfine.....等 先进行 替换,

预处理 不进行 计算, 只进行 字符串的 替换

这个 程序不懂了 , 可以看一下      <<C Primer Plus >>    define 那一章,  直接看 451页

-------------------------------------------------------分割线---------------------------------------------------------------

如果 能帮助到你 请采纳哦, 不懂了 继续问

查看完整回答
2 反对 回复 2016-08-30
  • 1 回答
  • 1 关注
  • 1538 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信