视觉C++错误:函数必须返回一个值
Visual C++ error: function must return a value
我正在做一个多平台项目,一些平台禁用了功能,在这些功能的界面中,我做的一件常见的事情是这样的:
bool Foo::bar() const {
// disabled
abort();
}
GCC/LLVM 不要求非 void 函数返回值(它们只是给出警告),在这种情况下,我调用 abort()
的地方,它们足够聪明,甚至不会发出警告(因为该函数无论如何都不会返回)。
有没有办法(编译标志?)使Visual C++ 2010的行为方式相同,这样我就不会继续破坏Windows版本?我知道我总是可以在中止后返回值,但是在其他平台上工作时,我通常会忘记这一点,并且不给出错误的行为似乎更合适。
__declspec(noreturn)
应该在MSVC++编译器中具有此效果。我希望标准abort
被声明为__declspec(noreturn)
。但是,由于编译器在您的示例中生成错误,因此可能不会以这种方式声明它。我建议您检查abort
声明.如果它没有__declspec(noreturn)
,您应该以某种方式添加它。
通常,Visual C++ 编译器允许您使用__declspec(noreturn)
对函数进行批注,以指示该函数永远不会返回。这有助于编译器意识到调用此类函数后的任何代码都是无法访问的。
您在这里遇到的问题已涵盖在此SO问题中。 长话短说,abort()
在 Visual C++ 运行时标头中没有此批注。
当您要禁用错误时,请添加/w34716
as compile 标志(假设您使用的是警告级别 3 或更高) - 现在仅发出警告(如果警告级别为 3 或更高)。您也可以禁用警告 ( /wd4716
),但这可能不是好主意 - 取决于由于这种行为而导致的警告数量。
相关文章:
- C++,class,一个返回对象的函数
- C++ 这里有一个返回 (24) 的布尔返回类型函数
- 我有一个返回字符串向量的函数.它需要两个字符串,并且返回一个字符串中缺少的字符串
- 两个相同的重载运算符[]一个返回引用
- 给定一个整数 N>0,区间 [0, 2^N) 中有多少个整数正好有 N-1 个设置位?编写一个返回正确答案的简短函数
- 为什么要定义一个返回结构的 lambda 函数,而不是直接定义结构
- 有没有办法重写一个返回指向 istringstream 的指针的函数,而不是返回一个引用?
- 提升:创建一个返回变体的函数
- C++重载运算符两次,一个返回非常量引用,另一个返回常量引用,首选项是什么
- 我是否应该将最后一个“返回”语句封装为“else { return .. }',如果它在逻辑上是可选的
- 野牛解析器:创建一个返回令牌的函数
- 为什么 C++ 数组的大小不能有一个返回常量的函数调用
- 如何创建一个返回传递的参数名称的函数
- 如何在C++中创建一个返回字节数组的函数?Arduino项目
- 将返回的指针分配给另一个返回的指针
- 如何声明一个返回类型是推导出来的函数
- Constexpr语言 - 为什么只是一个返回语句
- 如何创建一个返回护士函数的函数
- 如何用C包装一个返回智能指针的C++函数
- 如何使用两个函数,一个返回迭代器,另一个返回const_iterator