- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
assert(t1.tm_sec == t2.tm_sec);
assert(t1.tm_min == t2.tm_min);
assert(t1.tm_hour == t2.tm_hour);
assert(t1.tm_mday == t2.tm_mday);
assert(t1.tm_mon == t2.tm_mon);
assert(t1.tm_year == t2.tm_year);
assert(t1.tm_wday == t2.tm_wday);
assert(t1.tm_yday == t2.tm_yday);
assert(t1.tm_isdst == t2.tm_isdst);
А ещё могут быть указатели на одинаковые объекты, но указатели разные.
А ещё memmcmp это кулхацкерство.
тут речь идет об единственном типе структуры.
а так да, спасибо за экспланацию.
Не могу найти где это было...
Padding bytes могут присутствовать между полями структуры или в ее конце. Значения этих байтов-заполнителей - непредсказуемы, т.е. они содержат всякий мусор. Когда ты сравниваешь два объекта через 'memcmp', то волей-неволей сравниваешь и эти мусорные байты. Запросто может получиться, что настоящие содержательные поля в двух объектах совпадают, а вот промежуточные байты- заполнители - различаются. В такой ситуации 'memcmp' скажет тебе, что объекты не равны. А они таки равны.
Понятно, что в данно конкретном случае байтов-заполнителей, скорее всего, нет. Но это тем не мнее не повод пользовать 'memcmp' для выполнения такого сравнения.
З.Ы. Ну с другой стороны там и ассерта нету.
Тогда memcmp просто не нужен тут
Чтобы дампы чаще и быстрее получались, лол. На самом деле самый главный профит от заполнения.
А вот нули плохой паттерн.
хотя и CC наверное тоже: "случайно" попасть в настоящие данные из такого маленького адрса нельзя, там вроде самый низ адресного пространства обычно специально никуда не мапица?
Или он плохой тем, что его нельзя отличить от от умышленных нулей, пустых строк итд?
во даже как)
assert( t1==t2 );
а если нет - то с memcmp играться не стоит.
не сравниваются так структуры, к сожалению. В сишечке. В C# вроде бы можно