Как известно большинству программистов на С, нельзя сравнивать две структуры напрямую.
Рассмотрим:
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 (), так как пробелы из-за выравнивания и т. Д. Не имеют значения. С другой стороны, сравнение может быть более сложным. Или мне этого не хватает?
Очевидно, я знаю, что простого сравнения элементов не обязательно достаточно, например, если структура содержит указатель на строку, но существуют обстоятельства, когда это будет полезно.