【发布时间】:2019-08-16 23:12:51
【问题描述】:
在 GCC 7 上,我在 Qt creator 4.9 上启用了大部分警告。现在我有一个涵盖所有枚举值的 switch 语句。如果我添加 default:,我会收到警告(来自 Qt 创建者):
warning: default label in switch which covers all enumeration values
如果我删除 default: 我会收到另一个警告(来自 GCC):
error: this statement may fall through [-Werror=implicit-fallthrough=]
}
^
error: all warnings being treated as errors
我该怎么办?关闭警告?它们很有用,我不想关闭它们,但Wimplicit-fallthrough 似乎有问题。
[[fallthrough]] 没有帮助,因为 cases 以 return 结尾,因此我得到(来自 Qt 创建者):
warning: fallthrough annotation in unreachable code
__attribute__ ((fallthrough)) 也没有做任何事情。 /* FALLTHRU */ 或 [[gnu::fallthrough]] 或 // fall through 也没有。大概是因为-pedantic?
例子:
enum class E {a, b, c};
QVariant fun(E e) {
switch (e) {
case E::a: return "something";
case E::b: return "something_else";
case E::c: return "something_different";
// default: return QVariant{};
// Do I add a default:? What do I add here?
}
}
【问题讨论】:
-
你删除了什么默认值?你能举一个你默认的例子吗?
-
@Ayxan 您应该发布一些实际的可编译代码。这个基于您的示例的 sn-p gcc.godbolt.org/z/qJaiVK 使用 gcc 7 编译而不会发出警告。
-
@M.M 正如我在问题中提到的,它是 GCC 7。我还想注意 IDE,以防万一它有用。
-
这不是很有帮助,因为 gcc 7 有各种版本。无论如何,您应该发布 Minimal, Reproducible Example 显示您询问的所有各种条件
-
@Ayxan 在该代码中的错误是因为您指定了
-ansi标志(表示-std=c++98),并且您使用了在C++98 中无效的语法enum class。删除该标志,没有错误也没有警告
标签: c++ gcc qt-creator