以下程序如何运作?

时间:2014-05-27 12:16:50

标签: c macros c-preprocessor

#include<stdio.h>
#define SQR(x) (x*x)
int main(){
int a;
a= SQR(3-4);
printf("%d",a);
return 0;
} 

输出:-13

宏功能如何在此处将输出设为-13?

1 个答案:

答案 0 :(得分:1)

SQR内的表达式获得3-4*3-4,并且给定运算符的优先级,为您提供结果。这是宏中常见的错误。原则上,如果涉及一些计算,每个参数都应该用括号括起来:

#define SQR(x) ((x)*(x))

您将获得预期的结果。