作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在处理一些具有这种异常数组初始化的遗留 C 代码:
uint32_t defsMB40000[REG40000_SIZE] =
{
#include "modbusDefs40000.h"
};
头文件是逗号分隔的数字和注释的列表。我以前从未见过这种构造,但它似乎确实可以正常工作。放在页眉里面不是更好吗:
uint32_t defsMB40000[REG40000_SIZE] =
{
0,
0xFF,
...
};
然后
#include "modbusDefs40000.h"
在 .c 文件中?
我怀疑它存在的原因是头文件是由 python 脚本创建的。如果您对这个习语发表评论,如果您看过类似的评论,我将不胜感激。
谢谢,
jh
最佳答案
这不是习语,它只是使用 C 预处理器规则完成工作的技巧。本质上,作者依赖于这样一个事实,即 C 预处理器的工作方式就好像文件的内容被字面地嵌入到包含点一样。结果比较乱,但是完成了初始化数组的任务。
由于 C 头文件应具有特定结构,因此将文件命名为 modbusDefs40000.h
具有误导性。使用不同的扩展名,例如modbusDefs40000.data
或具有相同效果的内容,将使读者更清楚该文件的用途。
如果您正在寻找一种方法来重构它以使其更清晰,请考虑制作一个带有数组前向声明的 header ,即
// modbusDefs40000.h
extern uint32_t defsMB40000[REG40000_SIZE];
并更改 Python 脚本以围绕初始化程序的数据部分生成完整的声明(即两个固定行 - uint32_t defsMB40000[REG40000_SIZE] = {
在顶部和 };
在底部。调用生成的文件 modbusDefs40000.c
,并将其与项目中的其他 C 文件一起使用。
关于C - 不寻常的数组初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42259349/
我是一名优秀的程序员,十分优秀!