如何解决将Cppcheck和VCL结合在一起
Cppcheck现在可以进行检查,以检测对涉及VCL类(C ++ Builder6)的代码的假阳性(danglingTemporaryLifetime
)的引用。
这里是test.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#include <string>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:
TButton *Button1;
public:
explicit __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
class TTest
{
public:
std::string GetText() const;
void Init()
{
m_form->Caption = GetText().c_str();
m_form->Button1->Caption = "Text";
}
TForm1* m_form;
// Forbidden:
TTest(const TTest&);
TTest& operator=(const TTest&);
};
//---------------------------------------------------------------------------
一个在BCB6中编译的示例,如果这样调用
"C:\Program Files\Cppcheck\cppcheck.exe" --enable=style --inconclusive test.cpp
再现错误:
Checking test.cpp ...
test.cpp:23:9: error: Using pointer to temporary. [danglingTemporaryLifetime]
m_form->Button1->Caption = "Text";
^
test.cpp:22:34: note: Pointer to container is created here.
m_form->Caption = GetText().c_str();
^
test.cpp:23:9: note: Using pointer to temporary.
m_form->Button1->Caption = "Text";
^
我learned that one should not provide the include path to the standard library也从未尝试过为VCL做它。但是,现在Cppcheck无法解决未知类的Caption
属性。对于下一个成员访问(已知的Button1
),将给出错误,并且分配有临时成员的未知成员在这里仍然有效。
我还试图通过添加来告诉VCL Cppcheck的包含路径
-I "C:\Program Files (x86)\Borland\CBuilder6\Include\Vcl"
但这导致
C:\Program Files (x86)\Borland\CBuilder6\Include\Vcl\sysvari.h:3365:0: error: No pair for character ("). Can't process file. File is either invalid or unicode,which
is currently not supported. [preprocessorErrorDirective]
#pragma message "ERROR: sizeof(TVarData) < sizeof(VARIANT)'
^
如何解决这个问题?
解决方法
Cppcheck对此类属性有一些处理。我不希望Cppcheck为您的代码写垃圾。
您能告诉我如何复制吗?我已将您的代码放在文件1.cpp中,并使用命令cppcheck --enable=style --inconclusive 1.cpp
没有收到警告。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。