nullptr类型的宏返回值与函数类型不匹配

时间:2015-09-17 02:47:16

标签: c++

我正在尝试做类似的事情:

if (foo)
     return SET_ERROR_AND_RETURN_NULL(ERROR_HERE);

...使用

#define SET_ERROR_AND_RETURN_NULL(error)
    lastError = error; \
    return nullptr;    \

所以以后我可以......

if (GetMyLastError() == ERROR_HERE) { foo }

然而,我得到"Return value type does not match the function type."只是将SET_ERROR_AND_RETURN_NULL定义为nullptr当然是有效的,所以我猜它与类型如何与宏一起工作有什么作用?

也许我不应该使用宏来做这件事,但我受到了Windows系统错误代码的启发。如果这是一个坏主意,我想了解为什么函数调用会更好。

我也试图这样做,因为我希望保持if语句返回单行,而不需要在那里设置lastError

1 个答案:

答案 0 :(得分:2)

文字替换显示错误。

if (foo)
  return SET_ERROR_AND_RETURN_NULL(ERROR_HERE);

变为:

if (foo)
  return lastError = ERROR_HERE;
  return nullptr;

被解析为

if (foo)
  return lastError = ERROR_HERE;

return nullptr;

现在return lastError = ERROR_HERE将返回错误(因为=运算符的返回值),这可能不是您方法的返回类型。它是一个宏,而不是一个函数,因此它在文本上被替换:如果从宏返回,则直接从扩展宏的代码返回

这就是为什么你不能在不使用它们时使用它们,这里static方法已经足够了。

相关问题