Нежелательные предупреждения W8080 от компонента TeeChart в CBuilder XE8
При компиляции проекта под CBuilder XE8, в котором используются компоненты TeeChart, распространяемые вместе с этой IDE, я получаю множество ошибок, подобных этой:
[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, но никаких дальнейших действий нет.
У меня была похожая проблема с TeeChart под CBuilder 4 (что-то вроде 20 лет назад!). Хммм.
Я не хочу отключать предупреждение W8080 для всего проекта, так как это помогает поддерживать мой код в чистоте, но есть ли способ отключить предупреждения только для блока TeeChart?
Кроме того, я не уверен, что делать с ошибкой W8058. #pragma hdrstop
предшествует включению VclTee.TeeGDIPlus.hpp
, поэтому эта ошибка не должна возникать.
РЕДАКТИРОВАТЬ: Еще одна информация, которую я обнаружил, заключается в том, что нарушающие переменные - это глобальные переменные static / const, объявленные и инициализированные в GdiplusEnums.h и GdiplusHeaders.h (файлы, защищенные авторскими правами 2001 года от Microsoft).
Временное отключение предупреждения 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 назначено значение, которое никогда не используется". Хмм.
Это оскорбляет чувство хорошего стиля кодирования, но вы идете...
1 ответ
Вы можете отключить W8080 (или любое другое предупреждение), используя #pragma warn
директивы.
Я бы добавил его перед заголовком, который выдает предупреждения, чтобы вы не изменяли заголовок. Например:
#pragma warn -8080
#include <TheOffendingHeader.h>
#pragma warn .8080