猿问

关于类函数宏

#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呢?

qq_不睡觉的怪叔叔_0
浏览 1539回答 1
1回答

Yexiaomo

这个 你可以 仔细再看看书.#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页-------------------------------------------------------分割线---------------------------------------------------------------如果 能帮助到你 请采纳哦, 不懂了 继续问
随时随地看视频慕课网APP
我要回答