C++ cppcheck认为我有;冗余代码:找到一个以数字常量“quot”开头的语句;

C++ cppcheck认为我有;冗余代码:找到一个以数字常量“quot”开头的语句;,c++,enums,warnings,redundancy,cppcheck,C++,Enums,Warnings,Redundancy,Cppcheck,为类似此枚举的枚举提供以下警告: enum DATABASE_TYPE { DATABASE_TYPE_UNKNOWN = -1, // <- line of warning DATABASE_TYPE_ORACLE, DATABASE_TYPE_MSACCESS }; 所以现在我很有信心这是一个cppcheck的bug。有什么不同的意见吗?我的猜测是: A) 无效以某种方式在别处声明或定义 B) 枚举在包含两次的头中定义(没有头保护)。因为此代码会出现相同的错误

为类似此枚举的枚举提供以下警告:

enum DATABASE_TYPE
{
    DATABASE_TYPE_UNKNOWN = -1, // <- line of warning
    DATABASE_TYPE_ORACLE,
    DATABASE_TYPE_MSACCESS
};
所以现在我很有信心这是一个cppcheck的bug。有什么不同的意见吗?

我的猜测是:

A)
无效
以某种方式在别处声明或定义

B) 枚举在包含两次的头中定义(没有头保护)。因为此代码会出现相同的错误:

enum SomeEnumType
{
    invalid = -1,
    first,
    second,
};

enum SomeEnumType
{
    invalid = -1, // <- line of warning
    first,
    second,
};
enum SomeEnumType
{
无效=-1,
第一,
第二
};
枚举类型
{

无效=-1,//枚举的数据类型为无符号整数


更新:似乎是实现定义的:

不是真的:@Kotlinski:这就是我在我的答案中指出的更新链接。一个否决票再次指向我给出的相同链接。被接受的答案清楚地说::“此外,该标准还规定,它是由实现定义的,使用哪种整数类型作为枚举的基础类型,但它不应大于int,除非某些值不能适合int或无符号int。“@ArunMu:在我看到您的更新之前发布了评论。无论如何,底层实现是int还是unsigned int并不重要,除非您与<或>@Kotlinski::进行比较,您怎么能这么说?如果实现带有unsigned int,您认为它会将负值作为负值吗?”?(当然,除非用于强制转换)引用:“枚举的基础类型是一个整型类型,可以表示枚举中定义的所有枚举数值”。因此答案不相关,仍然以错误的语句开头,因此否决票。
invalid
只是一个例子。实际上,它看起来更像
invalidSomeEnumType
,所以它非常独特。@foraidt:问关于假代码的问题真的是浪费时间。发布真实的代码,这样我们就可以解决真实的问题。@foraidt:T如果创建一个最小的示例来给出错误,那么问题就很清楚了。不管怎样,给它赋值-1并不是问题,问题是cppcheck认为
无效
已经定义好了。如果你发现cppcheck中有一个bug,报告给开发人员,他们会很快修复它。@GMan:it已更新。但我怀疑它现在是否还有任何用处。人们仍然无法判断“无效”部分是在不检查整个代码库的情况下定义的。@kotlinksi:我试图创建一个最小的示例,但无法隔离问题。由于代码似乎编译良好,这就是我在这里询问它的原因。是的,这似乎是一个cppcheck错误-#pragma once不起作用。如果用#ifndef a#H/#de替换它好的A_H/#endif标题包装,cppcheck不再抱怨。这似乎也是一个公认的问题:@kotlinksi:如果你用这个更新了你的答案,我可以将其标记为接受。
enum SomeEnumType
{
    invalid = -1,
    first,
    second,
};

enum SomeEnumType
{
    invalid = -1, // <- line of warning
    first,
    second,
};