gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 02:20:46 28 4
gpt4 key购买 nike

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

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 }

但是,我得到 “返回值类型与函数类型不匹配。” 当然,只需将 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 方法就足够了。

关于c++ - nullptr 类型的宏返回值与函数类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32621838/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com