0

在使用随该 IDE 分发的 TeeChart 组件的 CBuilder XE8 下编译项目时,我收到大量如下错误:

[bcc32 Warning] GdiplusStringFormat.h(306): W8058 Cannot create pre-compiled header: initialized data in header
[bcc32 Warning] MI3Proc.cpp(719): W8080 'Gdiplus::FlatnessDefault' is declared but never used
[bcc32 Warning] MI3Proc.cpp(719): W8080 'Gdiplus::GenericSansSerifFontFamily' is declared but never used
[bcc32 Warning] MI3Proc.cpp(719): W8080 'Gdiplus::GenericSerifFontFamily' is declared but never used
[bcc32 Warning] MI3Proc.cpp(719): W8080 'Gdiplus::GenericMonospaceFontFamily' is declared but never used
[bcc32 Warning] MI3Proc.cpp(719): W8080 'Gdiplus::GenericSansSerifFontFamilyBuffer' is declared but never used
[bcc32 Warning] MI3Proc.cpp(719): W8080 'Gdiplus::GenericSerifFontFamilyBuffer' is declared but never used
[bcc32 Warning] MI3Proc.cpp(719): W8080 'Gdiplus::GenericMonospaceFontFamilyBuffer' is declared but never used
[bcc32 Warning] MI3Proc.cpp(719): W8080 'Gdiplus::GenericTypographicStringFormatBuffer' is declared but never used
[bcc32 Warning] MI3Proc.cpp(719): W8080 'Gdiplus::GenericDefaultStringFormatBuffer' is declared but never used

Steema 的支持论坛http://www.teechart.net/support/viewtopic.php?f=3&t=15374也报告了这个问题,但没有后续。

我在 CBuilder 4 下遇到了与 TeeChart 类似的问题(大约 20 年前!)。嗯。

我不想在项目范围内关闭 W8080 警告,因为它有助于保持我的代码干净,但是有什么方法可以关闭 TeeChart 单元的警告吗?

此外,我不确定如何处理 W8058 错误。在#pragma hdrstopinclude of 之前VclTee.TeeGDIPlus.hpp,因此不应发生此错误。

编辑:我发现的更多信息是,有问题的变量是在 GdiplusEnums.h 和 GdiplusHeaders.h 中声明和初始化的静态/常量全局变量(Microsoft 2001 年版权所有文件)。

暂时禁用 8080 警告不起作用,因为在嵌套包含链中的某处,8080 警告被重置为默认值。如果您在调用编译器时禁用 8080 警告(即全局选项),那么所有 8080 警告都将停止,但您不会发现自己的错误。即使将整个 cpp 单元放在一个#pragma warn -8080块中也不会停止警告!

我发现停止警告的唯一方法(不全局禁用 8080 警告)是将这样的虚拟代码放在每个受影响的源单元中的某个位置(以便引用变量

   void           *pvDummy;
   double         dDummy;
   BYTE           *pBYTEDummy;

   dDummy = Gdiplus::FlatnessDefault;
   pvDummy = Gdiplus::GenericSansSerifFontFamily;
   pvDummy = Gdiplus::GenericSerifFontFamily;
   pvDummy = Gdiplus::GenericMonospaceFontFamily;
   pBYTEDummy = Gdiplus::GenericSansSerifFontFamilyBuffer;
   pBYTEDummy = Gdiplus::GenericSerifFontFamilyBuffer;
   pBYTEDummy = Gdiplus::GenericMonospaceFontFamilyBuffer;
   pBYTEDummy = Gdiplus::GenericTypographicStringFormatBuffer;
   pBYTEDummy = Gdiplus::GenericDefaultStringFormatBuffer;

包含此代码的方法必须位于#pragma warn -8004 块中以避免有关“xxx 被分配了一个从未使用的值”的警告。嗯。

这确实冒犯了一些良好的编码风格,但是你去......

4

1 回答 1

0

#pragma warn您可以使用该指令禁用 W8080(或任何其他警告) 。

我会将它添加到产生警告的标题之前,因此您不要修改标题。例如:

#pragma warn -8080
#include <TheOffendingHeader.h>
#pragma warn .8080
于 2015-06-03T01:23:54.300 回答