В книге под названием «Программирование» Windows, в одном из примеров у нас есть эта строка:
ReadFile (hFile, buffer, MAXREAD, &i, NULL) ;
i
здесь было ранее объявлен как int
, но 4-й аргумент ReadFile
равен LPDWORD
, что является typedef для DWORD*
, а DWORD
является typedef для unsigned long
. Это эффективно печатает. В большинстве систем unsigned long
и int
имеют одинаковый размер, но я думаю, что доступ к переменной, как если бы это был какой-то другой тип, является неопределенным поведением. Это нормально? Это нормально, только если размеры одинаковы? Это UB? Я проверил несколько ошибочных веб-сайтов, и они, кажется, не перечисляют это. Я что-то пропустил?