我最近开始学习DirectX / Windows,而我正在学习的这本书有代码
d3d = Direct3DCreate9(D3D_SDK_VERSION);
if(d3d == NULL)
//catch error &c.
我的问题是:在这一行中会出现什么错误,这会导致另一行错误(例如,int num = 42
)?
答案 0 :(得分:4)
d3d = Direct3DCreate9(D3D_SDK_VERSION);
if (d3d == NULL)
根据您对Direct3DCreate9的返回值赋予的含义,即根据函数的规范,这是错误。我写了很多指针返回函数,其中NULL作为返回值并不是错误的情况。
因此,不要将“返回NULL的函数”等同于“错误”。明确的错误是代码中的崩溃(技术上,未定义的行为),例如,如果d3d确实为NULL,之后您将其取消引用。
int num = 42;
在这里,您声明一个名为num的int变量,并使用值42初始化它。您能想到什么样的错误?显然,如果困扰你,num将永远不会“为空”。 42可能是正确的值或错误,具体取决于上下文。
答案 1 :(得分:2)
我认为评论表明如果Direct3DCreate9(D3D_SDK_VERSION);
返回NULL,那么这是一个应该处理的错误。
来自msdn:
IDirect3D9 * Direct3DCreate9(UINT SDKVersion);
参数
SDKVersion 此参数的值应为D3D_SDK_VERSION。见备注。
返回值
如果成功,此函数返回一个 指向IDirect3D9接口的指针; 否则,返回NULL指针。
并不是说比较d3d == NULL
可能会引发异常。
答案 2 :(得分:0)
抓住这个错误很重要,因为它是一个显示阻止因素,因为它可以而且确实会发生。至于其他错误 - 我不知道你在说什么其他错误。
当然应检查并处理所有错误。但请记住,在一本书中,优先考虑的是使关键点尽可能易读和易懂。完整的错误检查会妨碍这一点,所以它通常会留给读者这个臭名昭着的练习。