【问题标题】:How to solve casting warning in creating MessageBox创建 MessageBox 时如何解决强制转换警告
【发布时间】:2012-11-02 23:06:49
【问题描述】:

(1) [已解决!]

wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION));

警告:从指针转换为不同大小的整数 [-Wpointer-to-int-cast]

解决方案

我通过使用解决了

wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);

因为我查看了IDI_APPLICATION 的定义,它被定义为

#define IDI_APPLICATION MAKEINTRESOURCE(32512)

奇怪吗? un peu。

(2) [已解决!]

MessageBox(NULL,
        _T("Call to RegisterClassEx failed!"),
        _T("Win32 Guided Tour"),
        NULL); // < here

警告:传递 'MessageBoxW' 的参数 4 从指针生成整数,无需强制转换 [默认启用]

【问题讨论】:

  • wcex.hIcon 是什么类型?当MessageBox 中需要一个整数时,为什么要传递 NULL?
  • 第二个:说0。永远不要将NULL 用作整数——它不是!这是一个指针!它甚至不必所有位都为零。
  • @KerrekSB - 好吧,我只是复制并粘贴这段代码msdn.microsoft.com/en-us/library/bb384843.aspx
  • @Fabricio:现在您刚刚了解了为什么 MS 网站对于学习如何编程来说是一个糟糕的地方!将其视为 API 参考,但仅此而已。你必须自带技能。
  • @KerrekSB - 哦,真的吗?生活是谎言。 D:

标签: c winapi gcc mingw


【解决方案1】:

1) 来自here

To use one of the predefined icons, set the hInstance parameter to NULL and the lpIconName parameter to one of the following values.

所以要使用MAKEINTRESOURCE(IDI_APPLICATION) 作为第二个参数,可选的第一个应该是NULL

如果不是这样...那么这就是您设置返回的方式,wcex.hIcon 需要是一个指针,而不是 intLoadIcon 返回一个HICON 类型,这是一个HANDLE 的typedef,这是一个VOIDP 的typedef,这是一个void * 的typedef

如果你这样做:

int wcex.hIcon = LoadIcon(...)

您会收到 cast from pointer to integer 警告。

2) 从here 开始,MessageBox() 的前三个参数是可选的,第四个不是。当它需要 UINT

时,您将第四个作为 NULL 传递

【讨论】:

  • 第一个,我设置为NULL,但警告仍然存在。我认为这与 MAKEINTRESOURCE arg 有关。
  • @Fabricio - 查看我的更新。我怀疑这更多的是LoadIcon() 函数的返回值的设置。您可以检查一下并更新 wcex.hIcon 的类型吗?
猜你喜欢
  • 2010-10-05
  • 1970-01-01
  • 2022-08-24
  • 1970-01-01
  • 2017-02-11
  • 1970-01-01
  • 1970-01-01
  • 2013-04-29
相关资源
最近更新 更多