游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1679|回复: 2

阅读《游戏编程指南》遇到得一个重复定义的问题

[复制链接]

10

主题

24

帖子

24

积分

注册会员

Rank: 2

积分
24
发表于 2008-5-27 09:13:00 | 显示全部楼层 |阅读模式
《游戏编程指南》中的一段代码
//************************************************************
//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)不就变成野指针了么???

0

主题

12

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2008-5-27 09:28:00 | 显示全部楼层

Re:阅读《游戏编程指南》遇到得一个重复定义的问题

外面的wc是多余的。

这里传wc的地址只是为了减少函数参数传递的开销,RegisterClass并不是要保存wc,只是取值而已。

10

主题

24

帖子

24

积分

注册会员

Rank: 2

积分
24
 楼主| 发表于 2008-5-28 14:12:00 | 显示全部楼层

Re:阅读《游戏编程指南》遇到得一个重复定义的问题

昨天晚上试验下,果然外面的WC是多余的,谢谢你的指导
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-22 09:24

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表