适当的止回控制功能

  • 本文关键字:控制 功能 c++
  • 更新时间 :
  • 英文 :


我有一个函数,它显示一些消息,正确地完成程序,并最终调用exit(-1);。下面是一个用法示例:

Data SomeFunction()
{
Data data;
if (some_condition) {
// filling the data
return data;
}
ShowErrorAndExit("Some message");
//return data - I don't want it here!
}

问题是,编译器说:

警告:控制到达非无效功能的末尾

但是,这不是真的,因为永远无法到达此函数的末尾。我不想在函数末尾添加不需要的返回;我还能做什么?

ShowErrorAndExit应标记为[[noreturn]]。这将删除警告。

示例:

[[noreturn]] void ShowErrorAndExit(std::string message) {...}

反转逻辑:

Data SomeFunction() {
if (!some_condition)
ShowErrorAndExit("Some message");
Data data;
// filling in the data
return data;
}

您可以(并且应该(使用[[noreturn]]属性(链接(声明ShowErrorAndExit函数。这将允许编译器(如果它合理理智的话(理解你的函数永远不会到达它发出警告的控制点。

类似这样的东西:

[[ noreturn ]] void ShowErrorAndExit(const char* message); 

您可能会欺骗编译器,使其认为return始终达到:

Data SomeFunction()
{
Data data;
if (! some_condition)
ShowErrorAndExit("Some message");
// fill the data
return data;
}

您可以忽略警告,或者,如果编译器提供了这样做的方法,则禁用它。另一种选择是在函数末尾放一个throw,并附上一条注释,指示它永远不应该执行。

您可以使用std::optional,它允许您返回类型Data或什么都不返回,也就是std::nullopt。看这里:https://en.cppreference.com/w/cpp/utility/optional

最新更新