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

Macro return value of type nullptr does not match function type

本文关键字:类型 函数 不匹配 nullptr 返回值      更新时间:2023-10-16

我想做的是:

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

文本替换显示错误。

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方法就足够了。