使用零长度数组重构结构
在遗留代码中,遇到包含零长度数组的结构并不罕见。这种非常规做法可能会引起担忧并阻碍代码重构工作。本文探讨了零长度数组背后的原因,并提供了重构它们的建议。
零长度数组的原因和用途
结构中的零长度数组作为指向动态分配内存的指针。这种技术被称为“C-Hack”,在较旧的编译器中用于创建任意长度的数组。通过声明一个包含零个元素的数组,编译器提供了一个指向该数组可能存在的内存位置的指针。这允许开发人员通过动态分配在运行时控制数组的大小。
替代方法:动态分配
在现代 C 中创建任意长度的数组在不诉诸零长度数组的环境中,使用动态内存分配。下面是一个示例函数,它使用指定长度的数组分配 someData 结构:
struct someData* mallocSomeData(int size) { struct someData* result = (struct someData*)malloc(sizeof(struct someData) + size * sizeof(BYTE)); if (result) { result->nData = size; } return result; }
此函数为结构及其数组分配内存,初始化 nData 成员,并返回指向分配的结构的指针。
重构建议
重构结构零长度数组,请按照以下步骤操作:
以上是如何重构旧 C/C 代码中包含零长度数组的结构?的详细内容。更多信息请关注PHP中文网其他相关文章!