在C中初始化struct数组

时间:2018-07-08 15:45:10

标签: c arrays struct

我应该将一些信息存储在一次出现的struct向量中。我事先知道数组的大小。我的问题是:我应该使用对我来说代表无效输入的结构初始化数组吗?例如,我应该执行以下操作:

typedef struct mystruct{
    int ID;
    int xvalue;
} my_struct;

#define NO_INPUT (my_struct) { ID=-1, xvalue=0}

其中ID = -1是对我而言没有意义的输入。定义之后,我应该将数组初始化为NO_INPUT吗?最佳做法是什么? PS #define指令正确吗?它与C89标准兼容吗?预先感谢!

1 个答案:

答案 0 :(得分:3)

选择在不必要的时候初始化存储具有成本和优势。 C让您选择毒药。

代价正在触及每个分配的字节。对于大型阵列,这可能会很昂贵。它可能会损害CPU缓存性能。某些C运行时在被触摸之前,不会将malloc页映射到程序的地址空间。初始化它们不利于优化。

优点在于缓解和修复错误。取消初始化初始化为NULL的指针会导致许多现代OS / CPU立即出现段错误。这种“快速失败”行为是一件好事。未初始化的指针可以指向实际数据,因此,有缺陷的代码将继续运行,产生错误的答案或在很多以后失败。初始化值在调试器和错误消息中也更有意义。它们还可以添加断言自初始化以来未使用过的位置,以便检测意外覆盖。

由于具有这些优点,即使初始化成本太高,某些程序也设计有“调试模式”,其中包括额外的初始化和带有预处理器指令的代码检查,或者在运行时动态启用/禁用它们。 / p>