c++ - 如何 'hide' 虚假 "declared but never used"警告?

标签 c++ warnings c++builder

我正在使用 Borland(又名“Embarcodegearland”)C++Builder 2007 编译器,它有一个小错误,系统头文件中的某些 static const 项可能导致虚假的 "xyzzy已声明但从未使用过” 警告。

我正试图让我的代码 100% 没有警告,所以想要一种屏蔽这些特定警告的方法(注意 - 但不是简单地关闭警告!)

此外,我无法修改头文件。我需要一种“伪造”元素用途的方法,最好甚至不知道它们的类型。

例如,将此函数添加到我的 .cpp 模块可修复这四个项目的警告,但它似乎有点“临时”。有没有更好的、最好是 self 记录的方式来做到这一点?

static int fakeUse()
{
  return OneHour + OneMinute + OneSecond + OneMillisecond;
}

编辑:亚历克斯建议这样的事情:

#pragma option push
#pragma warn -8080
#include "dateutils.hpp"
#pragma option pop

...不幸的是,这不起作用,因为编译器没有巧妙地管理警告状态,所以消息仍然显示。

编辑 #2:AshleysBrain 有一个很好的建议。我通过构建一个像这样的“dateutils_fix.hpp”头文件来实现它:

#ifndef DATEUTILS_FIXH
#define DATEUTILS_FIXH

#include <dateutils.hpp>

static void FIX_DATEUTIL_WARNINGS()
{
    UNREFERENCED(OneHour);
    UNREFERENCED(OneMinute);
    UNREFERENCED(OneSecond);
    UNREFERENCED(OneMillisecond);
}

#endif

... 然后在我自己的代码中 #including 这个 header 而不是 dateutils.hpp。

最佳答案

引用变量的常用方法是这样的:

#define UNREFERENCED(x)  ((void)x)

// ...

void MyFunc()
{
    const int x = 5; // never used for whatever reason
    UNREFERENCED(x); // stops compiler warning
}

“cast to void”实际上意味着“不对这个表达式做任何事情”,所以应该等同于空操作。不过,它也算作对变量的引用,因此警告被静音。不过,您需要将它放在函数代码中,因此类构造函数或启动方法可能会为您完成。我没有 C++ Builder 可以试用,但这适用于其他编译器。

关于c++ - 如何 'hide' 虚假 "declared but never used"警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2712377/

相关文章:

haskell - 对 GHC -Wall 风格的影响

delphi - 如何在 C++ 构建器中实现 Delphi protected 成员访问技巧?

c++ - std::set of MyElement 与 MyElement::SomeMethod 作为自定义比较器

c++ - 为 QML TreeView 创建模型

c++ - 如何使用 Softing 工具包从 OPC UA 服务器异步读取操作的回调中从 DataValue 响应中获取 NodeId 详细信息

java - 如何在转换 JComboBox 之前检查它的类型?

python - range() 中的计数器未被识别为整数

c++ - 如何像 Delphi 应用程序一样创建独立的(没有 DLL 文件依赖项)C++Builder 控制台应用程序?

delphi - 我可以在调试 C++ 应用程序时单步执行 VCL (Pascal) 代码吗?

c++ - 删除动态数组的正确方法是什么?