给定一个枚举:
enum Colours { RED, YELLOW, BLUE, NUM_COLOURS };
还有一些逻辑,例如:
switch (colour) {
case RED: /* ... */ break;
case YELLOW: /* ... */ break;
case BLUE: /* ... */ break;
}
大多数具有合理设置的编译器都会抗议 NUM_COLOURS
是未处理的情况。但是,这显然不是该特定值的用途,并且针对它的 case 语句是无稽之谈。
有没有什么方法可以让 linter/编译器知道忽略那个特定值是正确和适当的?还是一种确定该值而不将其包含在枚举中的方法?
最佳答案
这样做的标准投诉方式是使用 [[maybe_unused]]
。可以在枚举值后面加上:
enum A
{
B,
C [[maybe_unused]]
};
void f(A a)
{
switch (a)
{
case B: break;
}
}
不幸的是,编译器对此的支持并不好。 Clang 最近解决了一个支持这个的错误,必须在即将发布的 9.0.0 版本中(预计在 9 月)。 ( https://bugs.llvm.org/show_bug.cgi?id=36231 ) GCC 和 MSVC 半年前不支持它,因为我不需要那些,从来没有记录过关于它的错误。
如果您想要其他编译器/linter 的支持,您很可能必须为此记录一个错误。考虑到 Clang 中补丁的大小,我不希望在其他工具中支持它需要付出太多努力。
关于c++ - 如何在开关中将一个枚举值标记为不适当的大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57088316/