memset
一个结构对某个值是否合法,然后将其与memcmp
?
struct S {
// struct definition not relevant, but it has bitfields
};
struct S invalid_S;
memset(&invalid_S, 0xFF, sizeof invalid_S);
struct S value;
memset(&value, 0, sizeof value); // actual data read would be here
if (memcmp(&invalid_S, &value, sizeof(struct S) != 0) {
/// operate on fields of value
}
struct S value2;
value2 = invalid_S;
if (memcmp(&invalid_S, &value2, sizeof(struct S) != 0) {
/// operate on fields of value, which doesn't happen now
}
上述代码行为是否已明确定义、未定义或实现指定?上述代码的有效性取决于struct S
?
使用 0xFF 填充结构,然后将其memcmp
与报告错误的方式(设备永远不会返回所有 0xFF 字节)。我有固定的平台和工具链,代码现在可以工作,但是如果我提高优化级别,我可以相信它不会中断吗?
结论:虽然如果我确保没有填充位、浮点字段等可能有问题,则可以使此代码正常工作,但我决定改为将一个特定的结构字段设置为特定的“不可能”值以指示错误。