我正在使用具有成功宏的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的方式,是否仍然可以完成我所做的事情。
那可以吗?
非常感谢任何建议,
答案 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相同的错误值有点不寻常。我可以看到的唯一需要的是:
可能是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)