gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 18:15:28 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com