Как 'скрываться' побочный “заявленный, но никогда используемые” предупреждения?

Я использую Borland (иначе "Embarcodegearland") Разработчик C++ компилятор 2007 года, который имеет незначительную ошибку, настолько бесспорную static const объекты от системных заголовочных файлов могут вызвать побочный "xyzzy is declared but never used" предупреждения.

Я пытаюсь получить свое предупреждение 100% кода свободного, поэтому хотят способ замаскировать эти конкретные предупреждения (примечание - но не путем простого выключения предупреждения!)

Кроме того, я не могу изменить заголовочные файлы. Мне нужен способ 'фальсифицировать' использование объектов, предпочтительно даже не зная их тип.

Как пример, добавляя эту функцию к моим .cpp модулям фиксирует предупреждения для этих четырех объектов, но это кажется немного 'специальным'. Существует ли лучшее и предпочтительно самодокументирующий способ сделать это?

static int fakeUse()
{
  return OneHour + OneMinute + OneSecond + OneMillisecond;
}

Править: Alex предложил что-то вроде этого:

#pragma option push
#pragma warn -8080
#include "dateutils.hpp"
#pragma option pop

... который печально не работает, потому что состоянием предупреждения не управляет умно компилятор, таким образом, сообщения все еще показывают.

РЕДАКТИРОВАНИЕ № 2: AshleysBrain имеет хорошее предложение. Я реализовал его путем создания "dateutils_fix.hpp" заголовочного файла как это:

#ifndef DATEUTILS_FIXH
#define DATEUTILS_FIXH

#include <dateutils.hpp>

static void FIX_DATEUTIL_WARNINGS()
{
    UNREFERENCED(OneHour);
    UNREFERENCED(OneMinute);
    UNREFERENCED(OneSecond);
    UNREFERENCED(OneMillisecond);
}

#endif

... и затем #including этот заголовок вместо dateutils.hpp в моем собственном коде.

7
задан Roddy 26 April 2010 в 16:10
поделиться

3 ответа

Обычный способ ссылаться на переменные выглядит примерно так:

#define UNREFERENCED(x)  ((void)x)

// ...

void MyFunc()
{
    const int x = 5; // never used for whatever reason
    UNREFERENCED(x); // stops compiler warning
}

'приведение к void' фактически означает 'ничего не делать с этим выражением', поэтому должно быть эквивалентно бездействию. Это также считается ссылкой на переменную, поэтому предупреждение не выводится. Однако вам нужно поместить его в код функции, поэтому, возможно, вам подойдет конструктор класса или метод запуска. У меня нет C ++ Builder, чтобы попробовать его, но это работает для других компиляторов.

9
ответ дан 6 December 2019 в 11:47
поделиться

Другой вариант - использовать что-то вроде:

template <class T>
inline void unused(const T&) {}

Boost и Qt имеют значения ignore_unused_variable_warning и Q_UNUSED соответственно.

А вот небольшая статья об этом на сайте Sutter's Mill: Выключение предупреждений компилятора

2
ответ дан 6 December 2019 в 11:47
поделиться

Поддерживает ли C ++ Builder параметр #pragma warning ? В таком случае вы можете отключить это предупреждение вокруг строк #include .

В псевдокоде

#pragma warning(push)
#pragma warning(disable: 1234)
#include <someheader.h>
#pragma warning(pop)

Что-то вроде этого ...

Это может помочь для C ++ Builder.

6
ответ дан 6 December 2019 в 11:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: