Насколько велика unsigned int
в вашей системе?
Единственное, о чем я могу подумать, это может быть вызвано тем, что 16-битное битовое поле образует только часть переменной Timestamp
(если, например, unsigned int
имеет ширину 32 бита).
Другими словами, может быть, компилятор превращает это в:
Timestamp = (Timestamp & 0xffff0000) | 12;
, который вызвал бы эту проблему, если бы Timestamp
были неинициализированы.
Это соответствует:
- с использованием 16-битного короткого кода, поскольку код, вероятно, просто тогда станет
Timestamp = 12;
.
- с использованием
:32
, поскольку он расширяет битовое поле до точки, где также возможно прямое назначение.
Чистое предположение с моей стороны, но, исключая компилятор с мертвым мозгом, это лучшее, что я могу придумать (если это правда, это, вероятно, все еще мертвый мозг, но по-другому). 1026 *
FWIW, gcc не жалуется даже с -Wall
.