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