#定义成功或失败
我正在使用一个具有“NT_SUCCESS”成功宏的API。但是他们没有一个失败。所以通常我必须这样做。#定义成功或失败
if(something failed)
return !NT_SUCCESS;
else
return NT_SUCCESS;
有!NT_SUCCESS我不认为是非常可读的。所以,我决定这样做:
#define SUCCESS NT_SUCCESS
#define FAILURE (!NT_SUCCESS)
编辑=============================
这是NT_SUCCESS如何声明,做我所做的事情仍然可以。
那会好吗?
非常感谢您的任何建议,
我想补充括号良好的措施,但除此之外,你应该确定:
#define FAILURE (!(NT_SUCCESS))
这是“以防万一”,以防止不良的定义,例如#define NT_SUCCESS 1+1
。当然,没有一个理智的实现可以做到这一点,所以你的定义应该也可以。但是,不能因为偏执而伤害。:-)
嗯,这实际上依赖。作为一个API,返回相同的错误值有点不寻常,您可以拨打调用。我可以看到的唯一情况是需要的是:
- 你实际上是从API中发起的回调中返回一个值。
- 您正在替换API中的代码,因此必须遵循相同的规则。
这可能是NT_SUCCESS为0,但失败可以由任何其他整数指示。这意味着!NT_SUCCESS是而不是这意味着失败的唯一值。
当然,您可以*地从您的 API返回您希望的任何值,我不一定会使它们与您使用的API中的值相同。你可以很容易地返回故障指示(真=失败,错误=成功),这将使你的代码更漂亮寻找:
return something_failed;
或者,在最坏的情况,
if (something_failed) return TRUE;
: : :
return FALSE;
这是不好的,至少不知道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
这取决于您。
这不可能是正确的。当然,你应该返回一些错误代码,让调用者有机会找出为什么它不起作用?
这应该是好 – 2010-01-28 07:52:48
我刚刚编辑我的文章。显示如何声明NT_SUCCESS。谢谢。 – ant2009 2010-01-29 03:01:04
是的,'#define'确定。您可以正确使用它。 – 2010-01-29 03:29:46