Предупреждение при касте из якобы одинакового размера - PullRequest
0 голосов
/ 02 мая 2011

Я не могу понять это предупреждение.В нем говорится, что я преобразую MY_KEY в HKEY большего размера, но они будут иметь одинаковый размер (32 бита)?

//test.c
//compile as C
//compile with warning level 4

#include <windows.h>

typedef enum MY_KEY
{
    //from WinReg.h :
    //#define HKEY_CLASSES_ROOT ((HKEY)(ULONG_PTR)((LONG)0x80000000))

    //ULONG_PTR cast to avoid 'constant expression is not integral' error
    //(caused by HKEY being a HANDLE, and so a void*)
    MY_KEY_1 = (ULONG_PTR)HKEY_CLASSES_ROOT,
} MY_KEY;

void Func1(HKEY b)
{
    b;
}

void Func2(MY_KEY a)
{
    //produces warning C4306:
    //'type cast' : conversion from 'MY_KEY' to 'HKEY' of greater size
    Func1((HKEY)a);
}

(код C, VS2005, уровень предупреждения 4.)

1 Ответ

0 голосов
/ 02 мая 2011

Проблема в том, что MY_KEY является ULONG_PTR для HKEY. Вы вводите его к фактическому HKEY, когда передаете его функции 1, что является плохой идеей. Если вы хотите HKEY, почему вы не используете HKEY напрямую? Если вам по какой-то причине не нужен указатель, в этом случае передайте данные, на которые указывает указатель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...