【发布时间】:2011-02-12 07:58:51
【问题描述】:
我正在使用 Borland(又名“Embarcodegearland”)C++Builder 2007 编译器,它有一个小错误,即系统头文件中的某些 static const 项可能会导致虚假的 "xyzzy is declared but never used" 警告。
我正在尝试让我的代码 100% 无警告,所以想要一种屏蔽这些特定警告的方法(注意 - 但不是简单地关闭警告!)
另外,我不能修改头文件。我需要一种“伪造”物品使用的方法,最好甚至不知道它们的类型。
例如,将此功能添加到我的 .cpp 模块可以修复这四个项目的警告,但它似乎有点“临时”。有没有更好的、最好是自我记录的方式来做到这一点?
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
...然后在我自己的代码中#include 这个头文件而不是 dateutils.hpp。
【问题讨论】:
-
如果你写了一个从未被调用过的静态函数,你不会也收到警告吗?
-
@ptomato。似乎不是:-) - 我在心里争论这是一个错误还是一个功能。
-
有没有机会改用 VC++ 或请 Borland 的人来解决这个问题?因为它来自他们的头文件/编译器,而不是你的代码 IIUC。
-
@Alex - 我认为它可能已在最新版本中修复。不,VC++ 不是一个选项。
标签: c++ warnings c++builder