我想让某些函数调用的编译失败,而不是其他函数调用。我想要失败的函数调用是那些当值是某种类型时不处理返回值的函数调用。在下面的示例中,不处理返回 Error
的函数是编译错误,但不处理返回任何其他内容的函数应该成功。
注意:我们的运行时环境(嵌入式)不允许我们使用以下结构:RTTI、异常。
这段代码只需要用 Clang 编译,我宁愿不必注释每个函数。
我们更喜欢在编译时而不是在运行时失败的解决方案。
enum class Error {
INVAL,
NOERR,
};
// do something that can fail.
Error DoThing();
// may return different return codes, we never care (we can't change prototype)
int DoIgnoredThing();
int main() {
DoThing(); // compilation failure here, unused "Error" result
DoIgnoredThing(); // compilation succeeds, OK to ignore unused "int" result
return 0;
}
最佳答案
我不知道有什么方法可以直接使用 C++,但如果您使用的是 g++,则可以使用 warn_unused_result attribute连同 -Werror=unused-result 命令行标志。请参阅 warn_unused 结果的文档以了解如何指定它(不幸的是,您必须在每个函数上指定它;我不相信您可以为类型指定它)。然后编译器标志会将警告变成错误。
如果您不使用 g++,您的编译器可能具有类似的功能。
关于c++ - 如果返回值未用于特定类型,则编译失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12416604/