【发布时间】:2011-08-09 23:39:10
【问题描述】:
使用定义的宏来有条件地返回一个值有一个缺点,即仅查看客户端代码并不明显,可能会在宏点退出。
我正在考虑的用例是编写值和错误检查,如下所示:
#define WRITE_CHK(file, param)\
if (!write_that_returns_zero_on_fail(file, param)) {\
handle_error();\
return false;\
}
客户端代码:
bool myfunc()
{
...
WRITE_CHK(file, param) // function might return here
...
return true;
}
我很好奇宏(将在我的代码中的许多地方使用)的好处是否会超过上面提到的缺点。 除了简单扩展(不使用宏)之外,还有其他首选方法吗?
【问题讨论】:
-
嗯,通常的 C++ 方法是让“write”函数本身在出错时抛出异常,而不是不断检查返回码。有同样的“可能令人惊讶的提前返回”问题,但任何使用异常的程序也是如此......
-
我想要一个与 c 兼容的解决方案
-
请告诉我为什么我的问题被否决,以便我可以改进未来的问题
-
人们可能对您的问题投了反对票,因为它似乎是主观的。以“这是不好的做法”开头的问题通常在这里得到不好的评价。事实上,有人将其标记为“不具建设性”或离题。我碰巧不同意这一点,因为我认为你在这里和那里提出了一个有用的问题有很好的答案(如 Oli 的),这不仅仅是个人意见或可能引发争论。我赞成将其保持打开状态,但您可能需要稍微改一下标题。
-
宏的另一个问题是调用端的语法异常。它不能代替正确的语句,并且您有悬空的
else问题。您可以附加else (void)0以摆脱两者。