我一直在研究C代码。我已经使用#define声明了几个常量。但是我观察到,当我用常量(使用#define定义)对局部变量进行除法时,在数值上得到了错误的答案。
我尝试将定义的常量(使用#define)更改为局部变量,然后执行除法。现在我得到正确的答案。
问题是我有很多常数,其值将在各种函数中使用。我想知道如何解决这个问题。
这些是我在使用#define时得到的结果 “ 0.106883是q2,11.575652是D2,0.000004是q2 / D2”
这些是我用作局部变量时得到的结果。 “ 0.106883是q2,11.575652是D2,0.009233是q2 / D2”
我正在使用GCC 8.3.0_2。这是我的问题的简单版本。
#include <stdio.h>
#include<stdlib.h>
#define D2 (h2()*2)/(50)
double h2(void);
int main(){
double q2 = 0.106883;
printf("%f is q2, %f is D2 ,%f is q2/D2\n",q2,D2,q2/D2);
}
double h2(void){
return(289.391293);
}
答案 0 :(得分:2)
使用#define
,您的表达式实际上是q2/(h2()*2)/50
,而不是q2/((h2()*2)/50)
。您需要将#define
括在括号中,即#define D2 ((h2()*2)/50)
宏基本上只是文本替换。另一个例子:
#define a 1+2
int b = 3*a // 3*1+2 = 5
int c = 3*(a) // 3*(1+2) = 9