OpenGL + Win32 SDK 开发框架的搭建(C++语言版)(先补上一个问题!!)
来源:互联网 发布:js 数组最大值下标 编辑:程序博客网 时间:2024/05/22 05:27
(具体内容有时间补上去。)
/***************************************************************************************************************************
这里先记录开发中碰到的一个问题。
背景介绍:
OpenGL + Win32 SDK编程,使用C++语言。
使用VS2008,使用Debug生成或者Release生成。
一个父类GLWindow,该类有虚方法Method1(), Method2(), ... MethodN()。
两个子类Win1, Win2都单继承自GLWindow,分别重载了Method1(), Method2(), ... MethodN()。
在主程序中,动态生成两个子类各一个实例。
GLWindow * pWnd1 = new Win1();
GLWindow * pWnd2 = new Win2();
我想看到多态特性。
现象:
在使用Debug生成时一切正常,使用Release生成时有问题,如下:
调用pWnd1.Method1(), pWnd2.Method1(),运行正确,能够进入各自的方法。
调用pWnd1.Method2(), pWnd2.Method2(),运行正确,能够进入各自的方法。
调用pWnd1.Method3(), pWnd2.Method3(),结果pWnd1.Method3()总是进不去,直接进入pWnd2.Method3()方法 【使用单步跟踪~~】
... (其他的方法有的正常,有的也出现上述问题)
分析:
观察后发现,Method3方法在Win1和Win2子类中实现时的代码是一模一样的,所以其中一个的代码被优化掉了!(其实,在机器看来,执行效果是一样的,可是程序员看到就要纳闷了)
如果改动了其中任何一个的实现,则运行过程是对的。如果不改动代码,使用Debug模式结果总是正确的。
我尝试修改Debug和Release两种配置,更改了很多选项都不能解决问题。
总结:
1. 使用Release和Debug模式是有很多区别的,编译器和连接器提供的选项需要不断的去熟悉。
2. 虽然上面的现象不影响程序运行结果,但是总归有点不祥之兆。也许是我大惊小怪了,只是IDE不够智能?亦或是编译连接程序已经给优化掉了?至此我尚不知原因。
3. 但我还是发现了Release模式时可能会影响程序运行结果的一种情况。使用"assert(DoSomething());"这句代码,将会导致DoSomething()不被执行。需要使用替代语法"BOOL ret = DoSomething(); assert(ret);"。这个问题也曾经困扰了我多时。
***************************************************************************************************************************/- OpenGL + Win32 SDK 开发框架的搭建(C++语言版)(先补上一个问题!!)
- OpenGL + Win32 SDK 开发框架的搭建(C语言版)
- Win32 SDK函数MessageBox的模拟实现(C语言版)
- 射击游戏(OpenGL/C++/win32 SDK)
- 皇后问题(c语言版)
- 实现一个C语言版的JSON库(1)
- 栈的基本操作(附带一个数据结构、C语言版)
- 数据结构(c语言版)清华大学出版社,的几个公式问题
- (C语言版)猴子吃桃问题
- 正在学习《Windows程序设计》,补上SDK(Win32 API)编程这一课
- 俄罗斯方块(C语言版)
- 数据结构(C语言版)
- 数据结构(C语言版)
- Makefile(c语言版)
- 俄罗斯方块(C语言版)
- 万年历(C语言版)
- 队列(C语言版)
- 单链表(c语言版)
- 第269天(27W+6)
- OpenGL + Win32 SDK 开发框架的搭建(C语言版)
- ios之开发屏幕适配和系统版本适配
- Some CV Codes
- 反射
- OpenGL + Win32 SDK 开发框架的搭建(C++语言版)(先补上一个问题!!)
- 使用jfreechart生成柱状图、折线图、和饼状图
- php反序列化后的输出每个键值和value值
- 物流配货网(jsp+struts2+mysql)总结
- 第五章数组—5.2.4讲学习笔记
- Android开源项目--分类汇总
- struts2 ex成功
- mac svn 设置代理
- 三星开放了眼睛控制鼠标的源代码