使用cppcheck的警告,“隐藏具有相同名称的typedef”

时间:2010-07-28 07:00:23

标签: c++ static-analysis cppcheck

这是cppcheck警告信息 变量'BUFFER_INFO'隐藏了同名的typedef

BUFFER_INFO定义如下。

typedef struct tagBufferInfo
{
    CRITICAL_SECTION cs;
    Buffer* pBuffer1;
    Buffer* pBuffer2;
    Buffer* pLoggingBuffer;
    Buffer* pSendingBuffer;
}BUFFER_INFO, *PBUFFER_INFO;

我写道,

PBUFFER_INFO p = new BUFFER_INFO; // causes the warning.

有什么问题?我该如何解决? 感谢。

2 个答案:

答案 0 :(得分:4)

这看起来可能是一个cppcheck错误。

然而......你所写的是糟糕的C ++风格,更喜欢:

struct BUFFER_INFO
{
    CRITICAL_SECTION cs;
    Buffer* pBuffer1;
    Buffer* pBuffer2;
    Buffer* pLoggingBuffer;
    Buffer* pSendingBuffer;
};

我还会觉得,对于类型名称使用全部大写(这些通常是为常量保留)并不是很好的C ++样式,并且那些隐藏某些东西是指针这一事实的typedef通常不是一个好主意。

答案 1 :(得分:1)

在C ++中,您可以直接使用不带关键字struct的Struct名称,因此您不需要第一个类型为BUFFER_INFO的typedef。 但对于指针,你仍然可以拥有它。