Rod*_*ddy 7 c++ warnings c++builder
我正在使用Borland(AKA"Embarcodegearland")C++ Builder 2007编译器,它有一个小错误,static const系统头文件中的某些项可能会导致虚假"xyzzy is declared but never used"警告.
我试图让我的代码100%免费警告,所以想要一种掩盖这些特殊警告的方法(注意 - 但不要只是关闭警告!)
另外,我无法修改头文件.我需要一种"伪造"物品使用的方法,最好甚至不知道它们的类型.
例如,将此函数添加到我的.cpp模块会修复这四个项目的警告,但它似乎有点"临时".有没有更好的,最好是自我记录的方式来做到这一点?
static int fakeUse()
{
return OneHour + OneMinute + OneSecond + OneMillisecond;
}
Run Code Online (Sandbox Code Playgroud)
编辑:亚历克斯建议这样的事情:
#pragma option push
#pragma warn -8080
#include "dateutils.hpp"
#pragma option pop
Run Code Online (Sandbox Code Playgroud)
...遗憾的是,由于编译器没有巧妙地管理警告状态,因此仍然显示消息.
编辑#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
Run Code Online (Sandbox Code Playgroud)
...然后在我自己的代码中#include这个头而不是dateutils.hpp.
引用变量的常用方法是这样的:
#define UNREFERENCED(x) ((void)x)
// ...
void MyFunc()
{
const int x = 5; // never used for whatever reason
UNREFERENCED(x); // stops compiler warning
}
Run Code Online (Sandbox Code Playgroud)
'cast to void'实际上意味着'对这个表达式什么都不做'所以应该等同于no-op.它也算作变量的引用,因此警告被静音.您需要将它放在函数代码中,因此类构造函数或启动方法可能会为您完成.我没有C++ Builder来试试它,但这适用于其他编译器.
C++ Builder是否支持#pragma warning选项?如果是这样,您可以在行周围禁用该警告#include.
在伪代码中
#pragma warning(push)
#pragma warning(disable: 1234)
#include <someheader.h>
#pragma warning(pop)
Run Code Online (Sandbox Code Playgroud)
这样的东西......
这可能有助于 C++ Builder.
| 归档时间: |
|
| 查看次数: |
4204 次 |
| 最近记录: |