让宏定义为函数返回值是不好的做法吗?

Mic*_*nen 6 c c++ macros

使用定义的宏来有条件地返回一个值有一个缺点,即只看客户端代码可能会在宏的点退出.

我正在考虑的用例是写一个值和错误检查,如下所示:

#define WRITE_CHK(file, param)\
if (!write_that_returns_zero_on_fail(file, param)) {\
   handle_error();\
   return false;\
}
Run Code Online (Sandbox Code Playgroud)

客户代码:

bool myfunc()
{
   ...
   WRITE_CHK(file, param) // function might return here
   ...
   return true;
}
Run Code Online (Sandbox Code Playgroud)

我很好奇,如果宏的好处(将在我的代码中的许多地方使用)将超过上面提到的缺点.除了简单地扩展(不使用宏)之外,是否还有其他选择?

Oli*_*rth 16

标准答案是"不要使用宏"; 但这通常略显简单.在某些情况下,他们可以大大减少你本来就有的样板冗长度.

那么,为什么不将事实编码到宏名称中呢?例如WRITE_OR_RETURN_ON_FAILURE.它可能略显冗长,但它不太可能让你的代码的读者绊倒.

  • @Jonathan:是的,我考虑过了.但是有时候你真的只想把这个繁琐的模式包起来,而辅助函数就不会这样做. (5认同)
  • 我想给你+0.5。您的建议是完全正确的,但宏返回方法具有一定的嗅觉,更好的答案将涉及其他方法。还是+1。:) (2认同)