如果切换案例失败,如何使 MSVC 发出警告或失败?

odi*_*erd 5 c++ warnings compiler-warnings visual-c++

如果我的 switch 语句之一的 case 没有中断,我想收到警告/错误。这可能吗?

switch (i){
case 1:
    cout << "one";
//forgot to break here, I want to be warned about this
case 2:
    cout << "two";
    break;
}
Run Code Online (Sandbox Code Playgroud)

在 2012 年原生会议上讨论了类似的 Clang 功能,但我需要它用于 MSVC2013 http://channel9.msdn.com/Events/GoingNative/GoingNative-2012/Clang-Defending-C-from-Murphy-s-Million-Monkeys

理想情况下,当两个连续的主体没有被中断分隔时,我想要一个警告,这样上面的例子就会失败,但这不会:

switch (i){
case 1:
    cout << "one";
    break;
case 2:
case 3:
    cout << "not one";
    break;
}
Run Code Online (Sandbox Code Playgroud)

Lig*_*ica -14

不。

的全部目的switch是您不必这样做break但可以直接跳到下一个case

当您真正想要的是一条语句时,编译器甚至提供禁止这样做的选项是没有意义的if

  • clang 有一个选项,并且在 GCC 中有关于此警告的讨论 AFAIK,我似乎不是唯一想要它的人。 (6认同)
  • 我想要这个用于 MSVC,而不是 clang 或 GCC,但仍然感谢您的回答。 (5认同)
  • 这确实不是“交换机的全部目的”。就连 K&amp;R 也指出,从很多方面来说,失败是一件喜忧参半的事情。此外,许多编译器警告默认情况下是关闭的,因为它们对某些用户有帮助,但对其他用户没有帮助。 (4认同)
  • 既然 MSVC 表面上支持 [[fallthrough]],我希望能够添加诊断(如果还没有) (2认同)