Нежелательные предупреждения 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
Другие вопросы по тегам