#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页
-------------------------------------------------------分割线---------------------------------------------------------------
如果 能帮助到你 请采纳哦, 不懂了 继续问
- 1 回答
- 1 关注
- 1538 浏览
添加回答
举报
0/150
提交
取消