gpt4 book ai didi

c - 从假定相同尺寸的类型进行类型转换时发出警告

转载 作者:行者123 更新时间:2023-11-30 18:06:01 25 4
gpt4 key购买 nike

我无法理解这个警告。它说我正在将 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。)

最佳答案

问题是 MY_KEY 是 HKEY 的 ULONG_PTR。当您将其传递给函数 1 时,您将其类型转换为实际的 HKEY,这是一个坏主意。如果你想要一个 HKEY,为什么不直接使用 HKEY?除非您出于某种原因需要指针,在这种情况下,请传递指针指向的数据。

关于c - 从假定相同尺寸的类型进行类型转换时发出警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5857534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com