Помимо прочего, вы предполагаете, что указатель будет соответствовать в unsigned int
, где C не дает такой гарантии … сегодня используется несколько платформгде это не соответствует действительности, по-видимому, в том числе и ваше.
Указатель на данные можно безопасно хранить в (void*)
или (тип *
).Указатели могут быть добавлены (или вычтены для получения) size_t
или ssize_t
.Не существует гарантированной взаимосвязи между sizeof(int)
, sizeof(size_t)
, sizeof(ssize_t)
и (void*)
или (тип *
)…
(Кроме того, в этом случае нет никакой реальной точки в инициализации varи перезаписать его в следующей строке…)
Также не связано, но вы понимаете, что != (0x0 << 0)
→ != 0
и может быть опущено, поскольку if (x)
= if (x != 0)
…?Возможно, это потому, что это вырезано из более крупного образца, но вся эта процедура может быть представлена как
int TestRegister (unsigned int* BaseAddress)
{ return ( (0xffffffff & *(BaseAddress + Address)) ? 0 : 1 ); }
(Отредактировано: изменено на unsigned int*
, так как кажется, что он с большей вероятностью пропустит *Смещения 1029 *?)