# определить успех или неудачу - PullRequest
0 голосов
/ 28 января 2010

Я использую API с макросом для успеха, который называется NT_SUCCESS. Однако у них нет ни одного провала. Поэтому обычно я должен это сделать.

if(something failed)
    return !NT_SUCCESS;
else
   return NT_SUCCESS;

Имея! NT_SUCCESS, я не думаю, что это очень читабельно. Поэтому я решил сделать это:

#define SUCCESS NT_SUCCESS
#define FAILURE (!NT_SUCCESS)

РЕДАКТИРОВАТЬ =============================

#define ENT_NOERR 0 /* No error */ 
#define NT_SUCCESS ENT_NOERR /* synonym of ENT_NOERR */ 

Вот как объявляется NT_SUCCESS. Будет ли нормально делать то, что я сделал.

Это было бы хорошо?

Большое спасибо за любые предложения,

Ответы [ 8 ]

5 голосов
/ 28 января 2010

Я бы предложил поставить определение FAILURE в скобках:

#define FAILURE (!NT_SUCCESS)
4 голосов
/ 28 января 2010

Я бы добавил скобки для хорошей меры, но в противном случае вы должны быть в порядке:

#define FAILURE (!(NT_SUCCESS))

Это "на всякий случай", чтобы предотвратить неправильные определения, такие как #define NT_SUCCESS 1+1. Конечно, никакая вменяемая реализация не сделает этого, поэтому ваше определение тоже должно быть в порядке. Но не может быть больно быть параноиком. : -)

2 голосов
/ 28 января 2010

Это не может быть правильно. Конечно, вы должны вернуть какой-то код ошибки, который дает звонящему возможность выяснить, почему он не работает?

2 голосов
/ 28 января 2010

это было бы хорошо

1 голос
/ 28 января 2010

Это не нормально, по крайней мере, пока вы не знаете, как определяется NT_SUCCESS. Может быть определено как #define NT_SUCCESS 1 или #define NT_SUCCESS TRUE

Во втором случае имеет смысл написать !NT_SUCCESS, поэтому ваш код в порядке, но в первом случае запись !NT_SUCCESS означает !1, что не имеет никакого смысла. Во втором случае вам будет лучше:

#define SUCCESS NT_SUCCESS
#define FAILURE -1 //or other value which makes sense

Это зависит от вас.

1 голос
/ 28 января 2010

Ну, это на самом деле зависит. Для вас немного необычно возвращать те же значения ошибок, что и API, который вы вызываете . Единственный раз, когда я вижу, что это потребуется, если:

  • вы на самом деле возвращаете значение из обратного вызова, инициированного в API.
  • вы заменяете код в API, поэтому должны следовать тем же правилам.

Возможно, NT_SUCCESS равен 0, но сбой может указываться любым другим целым числом. Это означает, что! NT_SUCCESS не единственное значение, означающее сбой.

Конечно, вы можете свободно передавать из вашего API любые значения, которые вы пожелаете, я бы не стал делать их такими же, как значения из API, который вы используете. Вы могли бы довольно легко вернуть указание на ошибку (true = сбой, false = успех), что сделало бы ваш код более привлекательным:

return something_failed;

или, в худшем случае,

if (something_failed) return TRUE;
: : :
return FALSE;
1 голос
/ 28 января 2010

Вы уверены, что логически отрицательное значение NT_SUCCESS является признаком сбоя?

0 голосов
/ 28 января 2010

Если вы хотите быть по-настоящему параноиком, вы должны добавить круглые скобки:

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