检查结构是否为空

Check if a struct is empty

我有一段旧代码,其中包含一个大结构,如下所示:

typedef struct {
 long test1;
 char test2[10]
 …
} teststruct;

这个结构像这样初始化:

memset(teststruct, 0, sizeof(teststruct0));

我不能以任何方式更改此代码。如何有效地检查结构是否为空,或者在 memset()?

之后是否已被修改

听起来你想要的是查明这个结构是否有任何非零值。正如您在评论中看到的,您可能需要考虑一些例外情况,但对于简单的解决方案,我们可以复制此 previous answer.

// Checks if all bytes in a teststruct are zero
bool is_empty(teststruct *data) {
    unsigned char *mm = (unsigned char*) data;
    return (*mm == 0) && memcmp(mm, mm + 1, sizeof(teststruct) - 1) == 0;
}