c - 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
但是当我在其他一些函数中调用它时遇到错误。有没有办法做到这一点?
解决方案
源代码中的宏由预处理器替换。因此,无论您在哪里使用MAXBOMBS
,它们都会被(n*m)/100
. 这当然是不正确的,除非您碰巧在名为n
and的范围内有两个变量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;
}
我推荐使用函数的解决方案。
推荐阅读
- struts2 - 无法使用 Struts2-Junit-Plugin 执行任何 StrutsTestCase,动作方法为空
- javascript - 使用请求大小限制将大文件上传到 Node.JS 服务器
- apache - 无法通过我公司 LAN 网络访问我的网站
- python - Python Soc 网络分析:通过使用函数迭代列表来计算“机会网络同质性”
- amazon-cloudformation - 使用 Cloudformation 将暂停的进程添加到自动缩放组
- javascript - 如何在 gruntfile 上配置 jasmine 的随机数?
- c++ - 无符号位字段的溢出是否保证回绕?
- python - 将 <= 与“elif”和“and”一起使用时遇到问题
- postgresql - docker镜像中的postgresql
- python - Scrapy不返回特定标签的结果