为什么只检查某些错误值? (C ++?)

时间:2009-10-01 09:01:28

标签: c++ windows error-handling directx

我最近开始学习DirectX / Windows,而我正在学习的这本书有代码

d3d = Direct3DCreate9(D3D_SDK_VERSION);
if(d3d == NULL)
    //catch error &c.

我的问题是:在这一行中会出现什么错误,这会导致另一行错误(例如,int num = 42)?

3 个答案:

答案 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)

抓住这个错误很重要,因为它是一个显示阻止因素,因为它可以而且确实会发生。至于其他错误 - 我不知道你在说什么其他错误。

当然应检查并处理所有错误。但请记住,在一本书中,优先考虑的是使关键点尽可能易读和易懂。完整的错误检查会妨碍这一点,所以它通常会留给读者这个臭名昭着的练习。