gpt4 book ai didi

c - 如果我使用宏与局部变量执行除法,为什么结果会有所不同?

转载 作者:行者123 更新时间:2023-11-30 20:08:39 25 4
gpt4 key购买 nike

我一直在编写 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);
}

最佳答案

使用#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

关于c - 如果我使用宏与局部变量执行除法,为什么结果会有所不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55984279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com