1

如果我将WNDCLASSEX wcex变量定义放在主函数之外(作为全局变量),则该类将成功注册

#include <windows.h>
WNDCLASSEX wcex;
int main()
{
    wcex.cbSize = sizeof ( WNDCLASSEX );
    wcex.lpszClassName = "Success" ;

    if ( !RegisterClassEx ( &wcex ) )
    {
        MessageBox ( NULL, "Failed to register window class.", "Error", MB_OK );
    }
}

但是如果我把它放在主函数里面,它就不会被注册

#include <windows.h>
int main()
{
    WNDCLASSEX wcex;
    wcex.cbSize = sizeof ( WNDCLASSEX );
    wcex.lpszClassName = "Success" ;

    if ( !RegisterClassEx ( &wcex ) )
    {
        MessageBox ( NULL, "Failed to register window class.", "Error", MB_OK );
    }
}

我无法弄清楚原因,请帮助解决这个问题。提前致谢。

4

1 回答 1

4

具有静态存储持续时间的对象是零初始化的1)。您的第二个示例在语义上有所不同,因为wcex(自动存储持续时间)包含随机值。要匹配语义,请WNDCLASSEX wcex = { 0 };改用。


1) 假设您使用的是 C++ 编译器。C 的规则不同。

于 2016-05-09T21:54:08.153 回答