【发布时间】:2011-06-19 20:14:54
【问题描述】:
Cppcheck (version 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.cpp和inc.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 的错误。有不同意见吗?
【问题讨论】:
-
是的,这似乎是一个 cppcheck 错误 - #pragma once 不起作用。如果你用#ifndef A_H / #define A_H / #endif header wrapping 替换它,cppcheck 不会再抱怨了。
-
这似乎也是一个公认的问题:sourceforge.net/apps/trac/cppcheck/ticket/2417
-
@kotlinksi:如果你用这个更新了你的答案,我可以将其标记为已接受。
标签: c++ enums warnings redundancy cppcheck