cppcheck 的警告,“隐藏同名的 typedef”

问题描述 投票:0回答:2

这是一条 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.

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

c++ static-analysis cppcheck
2个回答
5
投票

这看起来可能是一个 cppcheck bug。

但是...你写的C++风格很糟糕,更喜欢:

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

我还观察到,使用全部大写的类型名称(这些通常为常量保留)并不是好的 C++ 风格,并且隐藏某物是指针这一事实的 typedef 通常不是一个好主意。


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.