|
|
《游戏编程指南》中的一段代码
//************************************************************
//main.cpp
//************************************************************
#include "Main.h"
HWND hwnd;
WNDCLASS wc;
BOOL progActive; //程序是否激活
RECT rect; //矩形,全局变量
//省略中间的代码
static BOOL InitWindow( HINSTANCE hInstance, int nCmdShow )
{
WNDCLASS wc;
wc.style = NULL;
wc.lpfnWndProc = (WNDPROC)WinProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = NULL;
wc.hCursor = NULL;
wc.hbrBackground = NULL;
wc.lpszMenuName = NULL;
wc.lpszClassName = "YXBCZN_CHAPTER_V";
RegisterClass(&wc);
hwnd = CreateWindow("YXBCZN_CHAPTER_V", "A Simple RPG", WS_POPUP, 0, 0, 640, 480, NULL, NULL, hInstance, NULL);
if(!hwnd)
{
return FALSE;
}
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
return TRUE;
}
WNDCLASS wc在程序开始被定义了,在static BOOL InitWindow( HINSTANCE hInstance, int nCmdShow )
函数体中又被定以,这不是重复定义么,编译的时候为什么不报错。如果说他们的可见域不同在,那么static BOOL InitWindow( HINSTANCE hInstance, int nCmdShow )函数在函数调用完毕后,函数中定义的wc被销毁,
其中RegisterClass(&wc)中的(&wc)不就变成野指针了么??? |
|