今天用VC6.0和Visual Studio 2005分别运行了OpenGL红宝书中的事例代码double.c,遇到了一些简单但是
我感觉很有用的东西。下面我简单的说一下。
第一件事情是有关 glClear()的使用.由于疏忽,我开始敲入代码时将 glClear()误输成了glClearColor()(呵呵,娃
娃偷懒直接粘过来的),结果运行时就发现原本应改是一个白色的正方形在屏幕上进行旋转变成了一个正方形旋转
成了一个原盘. 娃娃想了半天才感觉到好像是颜色缓冲区没有进行清理,回来和事例代码比对,发现了情况,改正
后,运行的效果和预期的一样。
第二件事情是关于stdlib.h的。
首先,我用的是VC6.0建立了一个工程进行编译,由于我的疏忽,没有加进#include
<stdlib.h>,结果编辑器报错:
F:/IDE/vc6.0/MyProjects/double/double.c(52) : error C2065: 'NULL' : undeclared
identifier
F:/IDE/vc6.0/MyProjects/double/double.c(52) : warning C4047: 'function' : 'void
(__cdecl *)(void )' differs in levels of indirection from 'int '
F:/IDE/vc6.0/MyProjects/double/double.c(52) : warning C4024: 'glutIdleFunc' :
different types for formal and actual parameter 1
执行 cl.exe 时出错.
我在google上搜索了一下,发现没有加进#include <stdlib.h>,加进这行代码后问题解决。
然后,我又试着用Visual Studio 2005建立了一个工程编译了一下,结果竟然又报错:
Error 1 error C2381: 'exit' : redefinition; __declspec(noreturn) differs
f:/ide/vc#2005/vc/include/stdlib.h 406
我在google上搜索了一下,发现是由于我加进了#include <stdlib.h>的原因,删除这行代码
后问题解决。当时我差点晕倒,因为一样的程序,在不同的编辑器上竟然因为同一行代码产生
了截然不同的编译结果。
通过这个例子我发现对于错误我们应该看到它的好的一面,通过glClear()的错误我深刻
的理解了glClear()的功能和glutDisplayFunc(display)工作方式,同时特感觉到了同一段程
序不同在不同编辑器应该区别对待,特别是细节上尤其要重视,我在此之前就因为这些细节问题
而无法使程序顺利的编译运行而苦恼了好长时间。
也许有人会问我干嘛非得同时用VC6.0和Visual Studio 2005。我是这样想的,一方面
VC6.0在我周围相当的普及,很多电脑上都安装了它,如果我很熟悉它,那么当我需要时我可
以很方便的找到机器使用,另一方面,microsoft在2001就发布了最后一期对VC6.0支持的
MSDN,全力转向了对.net和Visual Studio的支持上,这是大的趋势,我应该顺应这个趋势,以
能够在以后很好的适应可能遇到的工作上的需要。