gpt4 book ai didi

C 定义/全局变量依赖于其他东西

转载 作者:行者123 更新时间:2023-11-30 19:05:20 31 4
gpt4 key购买 nike

我正在为大学用 C 语言编写一个小游戏,但我陷入了困境。我(在头文件中)有这个结构:

typedef struct{

game_element field[MAX_ROWS][MAX_COLUMNS];
int n;
int m;

}battlefield;

我想将全局 MAXBOMBS 值设置为 (n*m)/100。 (上面结构体的 n 和 m 字段)。我尝试定义如下:

#define MAXBOMBS (n*m)/100

但是我在其他一些函数中调用它时遇到了错误。有没有办法做到这一点?

最佳答案

源代码中的宏被预处理器替换。因此,无论您在哪里使用 MAXBOMBS,它们实际上都会被 (n*m)/100 取代。这当然是不正确的,除非您碰巧在作用域中有两个名为 nm 的变量。但它不会是您想要的结构中的任何 nm

您可以通过两种方式解决这个问题:使用类似函数的宏

#define MAXBOMBS(s) (((s).n * (s).m) / 100)

你可以像这样使用它

battlefield f;
// Code that initializes the n and m members
some_function(MAXBOMBS(f));

或者您创建一个实际的函数,该函数采用battlefield结构作为参数,并进行所需的计算并返回结果:

static inline int maxbombs(battlefield bf)
{
return (bf.n * bf.m) / 100;
}

我推荐使用函数的解决方案。

关于C 定义/全局变量依赖于其他东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50075542/

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