gpt4 book ai didi

c - 在 C 中重新定义宏的问题

转载 作者:行者123 更新时间:2023-11-30 18:22:08 26 4
gpt4 key购买 nike

我想在程序运行期间更改宏的值,为此我编写了这个示例:

#include <stdio.h>
#define MAX (65535 *0.5)

int main ( ){
float amp = 0.0;
float temp = 0.0 ;
temp = MAX ;
char c;

while (1){
printf(" MAX value %.2d.%.3d \n ", (short)temp,(short)(temp*1000));
scanf("%c",&c);
if( c =='x') {
#undef MAX
#define MAX (65535 +amp);
amp+= 0.1;
temp = MAX;
}
}
return 0 ; }

我有两个问题:1. printf 没有按希望显示值,例如 19.211,它总是 -32768.-327682. 我没有看到宏的值有任何变化。

知道我在这里做错了什么吗?

最佳答案

您只能在编译时定义宏。 c preprocessor在实际编译发生之前替换宏的每次出现,使用 gcc,如果您尝试使用不同的方式进行实验,您可以使用 -E 开关查看预处理后生成的代码宏,您可能会更好地了解预处理器,请阅读链接以了解更多信息。

这个

if( c =='x') {
#undef MAX
#define MAX (65535 +amp);
amp+= 0.1;
temp = MAX;
}

没有按照你的想法做。

如果您对源代码执行预处理器,那么实际发生的情况是上面的代码片段将被编译为

if( c =='x') {
amp+= 0.1;
temp = MAX;
}

正如您所看到的,它并没有按照您的想法进行。

另外,这与宏重定义问题无关,但是您的代码有一个错误,可以使其进入无限循环,这

scanf("%c",&c);

在按Enter/Return后将继续扫描stdin中留下的'\n',因此您需要显式忽略通过在说明符之前添加空格来该字符,如下所示

scanf(" %c", &c);
/* ^ white space goes here */

注意:另一个答案表明您使用了不正确的数据类型并提出了解决方案,您应该 take a look at it ,因为实际上您的程序似乎存在整数溢出问题。

关于c - 在 C 中重新定义宏的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29256842/

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