Cppcheckは、「冗長コード:数値定数から始まる声明を見つけた」と考えています。

StackOverflow https://stackoverflow.com/questions/4872566

質問

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.h, a.cpp, b.h, b.cppinc.h 次のコンテンツで。
VC9は警告なしにコンパイルします(警告レベル4)。

// 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のバグであると確信しています。異なる意見はありますか?

役に立ちましたか?

解決

私の推測は、どちらかです:

a) invalid どういうわけか、他の場所で宣言または定義されています。

b)列挙は、ヘッダーが2回(ヘッダーガードなし)に含まれるヘッダーで定義されています。このコードで同じエラーが発生しているため:

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

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

コードはGCCでコンパイルされますか?


アップデート:

はい、これはcppcheckのバグのようです - #pragma once 動かない。それを置き換えると #ifndef A_H / #define A_H / #endif ヘッダーラッピング、Cppcheckはもう文句を言いません。

これもように見えます 認識された問題.

他のヒント

Enumsには、署名されていない整数としてデータ型があります。

更新:実装が定義されているようです。 C ++列挙は署名されていますか、それとも署名されていませんか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top