在使用随该 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 hdrstop
include 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 被分配了一个从未使用的值”的警告。嗯。
这确实冒犯了一些良好的编码风格,但是你去......