,在编译使用与IDE分布的TeeChart组件下的CBuilder XE8一个项目,我得到的错误的长里姆斯这样的:不需要W8080警告
[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
位于VclTee.TeeGDIPlus.hpp
的前面,所以不应出现此错误。
编辑: 我发现一些更多的信息是有问题的变量是静态/ const的全局变量和宣布,以GdiplusEnums.h和GdiplusHeaders.h(文版权所有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方法警告-8004块,以避免警告约“XXX被分配是从未使用过的值”。哎呀。使用#pragma warn
指令
这确实得罪良好的编码风格一定意义,但你去那里...
根据我的经验,W8058绝不应该在它应该在的地方。这通常意味着在别的地方,你正在声明一些数据。有些时候,它显示在默认的字符串参数中,或类似的东西在其他头文件中工作正常(即不会产生此警告)。我*从未*看到它指出问题出在哪里,通常甚至不在正确的标题中。您可以尝试在“罪魁祸首”标题前注释#includes,看看它是否停止,然后查找扩展常量的实例,至少对我来说通常会导致问题。 –