我正在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
但是当我在其他一些函数中调用它时遇到错误。 有没有办法做到这一点?
答案 0 :(得分:1)
预处理器在源代码中替换了 。因此,无论您使用MAXBOMBS
的任何地方,它们都会被(n*m)/100
完全取代。这当然不正确,除非您碰巧在名为n
和m
的范围内有两个变量。但它不会是您想要的结构中的任何n
或m
。
您可以通过以下两种方式解决:类似函数的宏
#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;
}
我推荐使用函数的解决方案。