7

Cppcheck(版本 1.46.1)对像这样的枚举给出以下警告:

enum DATABASE_TYPE
{
    DATABASE_TYPE_UNKNOWN = -1, // <- line of warning
    DATABASE_TYPE_ORACLE,
    DATABASE_TYPE_MSACCESS
};

冗余代码:找到以数字常量开头的语句

我不认为这是多余的。能够做这样的事情是非常重要的。

这是 cppcheck 的错误还是我什么也没看到?

更新

我设法把它归结为一个最小的例子。由于 cppcheck 有 2 个(更多)错误,这使这变得复杂,这使得我的减少看起来没有效果。
有 5 个文件:a.ha.cpp、和b.h,内容如下。 VC9 编译它没有警告(警告级别 4)。b.cppinc.h

// a.h
#pragma once
#include "inc.h"

// a.cpp
#include "a.h"
#include "b.h"

int main()
{
    return 0;
}


// b.h
#pragma once
#include "inc.h"

// b.cpp
#include "b.h"

//inc.h
#pragma once

enum MY_ENUM_TYPE
{
    INVALID_VALUE = -1,
    FIRST_VALUE,
    SECOND_VALUE
};

所以现在我很确定这是cppcheck的一个错误。有不同意见吗?

4

2 回答 2

6

我的猜测是:

A)invalid以某种方式在其他地方声明或定义。

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

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

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

您的代码是否使用 GCC 编译?


更新:

是的,这似乎是一个 cppcheck 错误 -#pragma once不起作用。如果您将其替换为#ifndef A_H// header wrapping #define A_H#endifcppcheck 就不再抱怨了。

这似乎也是一个公认的问题

于 2011-02-02T09:21:57.340 回答
-2

枚举的数据类型为无符号整数。

更新:似乎它是实现定义的:C++ 枚举是有符号的还是无符号的?

于 2011-02-02T09:30:18.493 回答