Зачем проверять только определенные значения на наличие ошибок? (C ++?) - PullRequest
0 голосов
/ 01 октября 2009

Я недавно начал изучать DirectX / Windows, и в книге, из которой я учусь, был код

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

Мой вопрос: что может вызвать ошибку в этой строке, которая отличается от того, что может вызвать ошибку в другой строке (скажем, например, int num = 42)?

Ответы [ 3 ]

4 голосов
/ 01 октября 2009
d3d = Direct3DCreate9(D3D_SDK_VERSION);
if (d3d == NULL)

Это ошибка или не соответствует значению, которое вы даете возвращаемому значению Direct3DCreate9, т.е. в зависимости от спецификации функции. Я написал много функций, возвращающих указатели, для которых NULL в качестве возвращаемого значения не был ошибочной ситуацией.

Итак, не приравнивайте «функцию, возвращающую NULL» к «ошибке». Однозначная ошибка - это сбой (с технической точки зрения, неопределенное поведение) в вашем коде, например, если d3d действительно равен NULL, а позже вы разыменовываете его.

int num = 42;

Здесь вы объявляете переменную int с именем num и инициализируете ее значением 42. О какой ошибке вы можете думать? Очевидно, что num никогда не будет «NULL», если это вас беспокоит. 42 может быть правильным значением или ошибкой, в зависимости от контекста.

2 голосов
/ 01 октября 2009

Я думаю, что комментарий указывает, что если Direct3DCreate9(D3D_SDK_VERSION); вернул NULL, то это ошибка, которую следует обработать

Из MSDN:

IDirect3D9 * Direct3DCreate9 (UINT SDKVersion);

Параметры

SDKVersion Значение этого параметра должно быть D3D_SDK_VERSION. См. Примечания.

Возвращаемые значения

В случае успеха эта функция возвращает указатель на интерфейс IDirect3D9; в противном случае возвращается нулевой указатель.

Нельзя сказать, что сравнение d3d == NULL может вызвать исключение.

0 голосов
/ 01 октября 2009

Важно уловить эту ошибку, потому что это шоу-стопор и потому что это может и случается. Что касается других ошибок - я не знаю, о каких других ошибках вы говорите.

Конечно, все ошибки должны проверяться и обрабатываться. Но помните, что в книге приоритет состоит в том, чтобы сделать ключевые моменты как можно более понятными и понятными. На этом помешала бы полная проверка ошибок, поэтому ее часто оставляют читателю как позорное упражнение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...