#define成功或失败

时间:2010-01-28 07:50:24

标签: c

我正在使用具有成功宏的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 个答案:

答案 0 :(得分:5)

我建议将FAILURE定义括在括号中:

#define FAILURE (!NT_SUCCESS)

答案 1 :(得分:4)

我会添加括号以获得良好的衡量标准,但除此之外你应该没问题:

#define FAILURE (!(NT_SUCCESS))

这是“以防万一”,以防止诸如#define NT_SUCCESS 1+1之类的错误定义。当然,没有理智的实现会这样做,所以你的定义也应该没问题。但是,偏执是不会伤害的。 : - )

答案 2 :(得分:2)

没关系

答案 3 :(得分:2)

这可能不正确。当然你应该返回一些错误代码,让调用者有机会找出它不起作用的原因?

答案 4 :(得分:1)

您确定NT_SUCCESS的逻辑否定值是否表示失败?

答案 5 :(得分:1)

嗯,这实际上取决于。您返回与调用的API相同的错误值有点不寻常。我可以看到的唯一需要的是:

  • 您实际上是从API中启动的回调中返回一个值。
  • 您正在替换API中的代码,因此必须遵循相同的规则。

可能是NT_SUCCESS为0但是失败可以由任何其他整数指示。这意味着!NT_SUCCESS 不是唯一意味着失败的值。

当然,您可以随意从您的 API传回任何您想要的值,我不一定会将它们与您正在使用的API中的那些相同。您可以很容易地返回失败指示(true = fail,false = success),这将使您的代码更好看:

return something_failed;

或者,最糟糕的是,

if (something_failed) return TRUE;
: : :
return FALSE;

答案 6 :(得分:1)

不行,至少在知道如何定义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

取决于你。

答案 7 :(得分:0)

如果你想成为真正的偏执狂,你应该添加括号:

#define FAILURE (!NT_SUCCESS)