-2
当我在Linux上执行以下代码时,输出为32.为什么这样?m是一个定义为10 + 2的宏;为什么m * m评估为32?
#include <stdio.h>
#define m 10+2
int main() {
int i;
i = m * m;
printf("%d", i);
return 0;
}
当我在Linux上执行以下代码时,输出为32.为什么这样?m是一个定义为10 + 2的宏;为什么m * m评估为32?
#include <stdio.h>
#define m 10+2
int main() {
int i;
i = m * m;
printf("%d", i);
return 0;
}
i=m*m
实际上是计算为
10 + 2 * 10 + 2
这是
10 + 20 + 2 = 32
#include<stdio.h>
#define m 10+2
int main()
{
int i;
i=(m)*(m); \\this will provide you with output as (10+2)*(10+2)
printf("%d",i);
return 0;
}
宏展开不听从周围的语法,所以i=m*m
被扩展到i=10+2*10+2
,而不是i=(10+2)*(10+2)
。这究竟是为什么每个人都应该加上括号宏定义和参数:
#define m (10+2)
我在下面的代码中有关于宏功能的另一个疑问。 – RAMD 2014-12-04 19:09:26
错误的解决方案。总是把括号放在宏定义中,所以你不必在调用时考虑它。 – 2014-12-04 19:14:51
嗯..实际上Aasmund已经给出了这个解决方案,所以我去了一个备用的解决方案,以明确使用括号来执行多行操作。 – 3Demon 2014-12-04 19:18:56