Как известно большинству программистов на C, вы не можете напрямую сравнивать две структуры.
Рассмотрим:
void isequal(MY_STRUCT a, MY_STRUCT b)
{
if (a == b)
{
puts("equal");
}
else
{
puts("not equal");
}
}
Сравнение a==b
сделает AFAIK ошибкой компиляции для любого разумного компилятора C, потому что стандарт C не позволяет встроенного сравнения структуры. Обходные пути с использованием memcmp - это, конечно, плохая идея из-за выравнивания, упаковки, битполей и т.д., Поэтому мы заканчиваем тем, что пишем элемент по элементам сравнения.
С другой стороны, он разрешает назначение структуры, например. a = b
является полностью законным.
Очевидно, что компилятор может справиться с этим довольно тривиально, так почему бы не сравнить?
Единственная идея, которая у меня была, заключалась в том, что назначение структуры, вероятно, довольно близко к memcpy(), поскольку разрывы из-за выравнивания и т.д. не имеют значения. С другой стороны, сравнение может быть более сложным. Или это что-то мне не хватает?
Очевидно, что я знаю, что выполнение простого элемента путем сравнения элементов не обязательно достаточно, например. если структура содержит указатель на строку, но есть обстоятельства, в которых это было бы полезно.