c - array - Почему я могу назначать структуры, но не сравнивать их



c struct typedef (1)

Несмотря на то, что я долго программист на C, я только недавно узнал, что можно напрямую назначать структурные переменные друг другу, а не использовать memcpy:

struct MyStruct a,b;
...
a = b; /* implicit memcpy */

Хотя для C это немного «высокий уровень», это определенно полезно. Но почему я не могу сравнивать равенство и неравенство:

if (a == b) ...
if (a != b) ...

Есть ли веская причина для исключения этого стандарта? Или это несоответствие в стандарте - в противном случае очень элегантно?

Я не понимаю, почему я могу заменить мои memcpy для чистых назначений, но я должен держать эти уродливые memcmp на месте.


На comp.lang.c часто задаваемые вопросы :

Нет никакого хорошего способа для компилятора реализовать структурное сравнение (т. Е. Поддерживать оператор == для структур), что согласуется с низким уровнем вкуса C. Простой байтовое сравнение может основываться на случайных битах, присутствующих в неиспользуемых «дырах» в структуре (такое дополнение используется для правильного выравнивания более поздних полей). Для сравнения полей может потребоваться недопустимое количество повторяющихся кодов для больших структур. Любое компиляционное сравнение не могло бы должным образом сравнивать поля указателей во всех случаях: например, часто бывает полезно сравнивать поля char * с strcmp, а не ==.

Если вам нужно сравнить две структуры, вам нужно будет написать свою собственную функцию, чтобы сделать это по полю.





assign