C++/CLI 的 Cppcheck 语法错误代码异味

Posted

技术标签:

【中文标题】C++/CLI 的 Cppcheck 语法错误代码异味【英文标题】:Cppcheck syntax error code smell by C++/CLI 【发布时间】:2020-03-02 14:54:49 【问题描述】:

新版本的 cppcheck 在以下行代码中发现了两个名为“语法错误”的主要代码异味:

System::Reflection::Assembly^ Foo(Object^ /* obj */, System::ResolveEventArgs^ args)
        ...

catch (System::Exception^ /*e*/)

错误文本:

Cppcheck cannot tokenize the code correctly.

知道如何解决它们吗? C++/CLI 语法有问题吗?

这对我来说似乎是一个误报,因为代码可以编译并运行很长时间。

【问题讨论】:

C++ 不是 cppcheck 吗? C++/CLI Type^ 语法在 C++ 中不存在,所以这肯定是 CppCheck 混淆的地方。 在询问有关错误的问题时,请始终包括您得到的实际错误,并以文本的形式完整复制粘贴。 @ViktorBe 不,显示的代码不是 C++ 代码。这也是 cppcheck 实际上告诉你的。 正如其他人已经指出的那样,Cppcheck 不支持 C++/CLI。尝试使用其他分析仪。例如,PVS-Studio 支持对 C++/CLI 和 C++/CX (WinRT) 的分析。 【参考方案1】:

知道如何解决它们吗?

你无能为力。 C++/CLI 是 C++ 的一种方言,它不是标准的 C++。 cppcheck 仅适用于标准 C 或 C++,因此它将无法理解 C++/CLI 代码,从而为您提供所看到的诊断。您需要从您的 cppcheck 检查中排除使用 C++/CLI 代码的源文件以避免这些错误。

【讨论】:

以上是关于C++/CLI 的 Cppcheck 语法错误代码异味的主要内容,如果未能解决你的问题,请参考以下文章

cppcheck使用大全

静态代码检查工具 cppcheck 的使用(可分别集成到VS和QT Creator里)

C++代码审查工具Cppcheck和TscanCode

C: Cppcheck : 可能的空点取消引用

带有空大括号的 C++ 新初始化触发 cppcheck uninitvar 错误

Sqlite3.c 中的 For-loop 语法错误