2015-06-22 3 views
0

У меня есть структура, содержащую неподписанные символы и битовые поля:Сравнение два беззнаковых полукокс структуры и битовых поля

struct { 
unsigned char byt1 ; 
unsigned char var1 :1; 
unsigned char byt2 ; 
unsigned char var2 :1; 
unsigned char var3 :1; 
unsigned char var4 :1: 

} struct1; 

Я хочу, чтобы сравнить эту структуру с собой. Я сохраняю две копии этой структуры, и я хочу просто проверить, не изменилось ли что-то по сравнению с первой копией.

Безопасно ли использовать memcmp() здесь? Реальная структура имеет 50+ членов, и все они являются неподписанными символами или битами.

+0

Безопасное использование 'memcmp' в структурах битового поля, так как безопасно использовать' memcmp' для любого другого типа данных (переменные, массивы, «нормальные» структуры, распределенные статически или динамически). До тех пор, пока аргумент 'length', который вы передаете' memcmp', не превысит диапазоны одного из блоков входной памяти, он должен работать правильно. –

ответ

1

структура выглядит, как она может содержать много дополнения, и содержимое этой памяти не определен (смотри, например, this old SO answer, а также this memcmp reference), так что ни вы не можете реально использовать memcmp.

Однако, если вы инициализируете структуры, например. memset затем он должен работы. Это технически неуказано, но на практике memset также должен устанавливать прокладку.

Итак, чтобы ответить на ваш вопрос: если вы всегда очищаете структуры, используя memset, вы должны на практике быть в порядке, используя memcmp, но теоретически это неопределенное поведение.

+0

Спасибо, я просто перегрузил оператор == и сделал это безопасным способом. – zacharoni16

Смежные вопросы