首页 > 解决方案 > C定义/全局变量,它依赖于其他东西

问题描述

我正在用 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

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

标签: c

解决方案


源代码中的宏由预处理器替换。因此,无论您在哪里使用MAXBOMBS,它们都会被(n*m)/100. 这当然是不正确的,除非您碰巧在名为nand的范围内有两个变量m。但它不会是任何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;
}

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


推荐阅读