|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
#define ADD(x,y) x+y
int main()
{
int k;
k=ADD(1,2)*ADD(3,4);
printf("%d\n",k);
return 0;
}
想问一下这个为什么输出是11呀
这个 C 程序的输出是 11,因为在 C 语言的宏替换过程中,没有考虑到运算符的优先级。这里我们分解一下代码来解释这个现象。
首先,定义了一个宏 ADD(x, y),用于计算 x 和 y 的和。在代码的 main 函数中,用这个宏计算了 k 的值:
- k = ADD(1, 2) * ADD(3, 4);
复制代码
宏的替换是在预处理阶段完成的,因此在编译时,上述代码会被替换为:
注意,这里的替换是纯文本替换,没有考虑运算符的优先级。在 C 语言中,乘法运算符 (*) 的优先级高于加法运算符 (+)。因此,这个表达式会按照如下顺序计算:
计算后得到:
最后:
所以程序的输出是 11。
为了避免这种问题,可以在宏定义中使用括号来确保正确的计算顺序:
- #define ADD(x, y) ((x) + (y))
复制代码
这样修改后,程序会输出正确的结果,即 21。
|
|