C define / global变量依赖于其他东西

时间:2018-04-28 10:33:12

标签: 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

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

1 个答案:

答案 0 :(得分:1)

预处理器在源代码中替换了 。因此,无论您使用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;
}

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