заставить cppcheck пропустить определение ПАКЕТА

Я использую версию cppcheck 1.64 с графическим интерфейсом для статического анализа кода C++-Builde-6. Для экспорта и импорта DLL необходимо определение PACKAGE:

/// A dialog exported from a BPL (a VCL-specific kind of DLL)
class PACKAGE MySharedDialog {

public:
    // lots of methods to-be checked

private:
    // lots of methods to-be checked

    // lots of members

};

Cppcheck останавливается, когда встречает PACKAGE, потому что не знает, что это значит:

Код 'class PACKAGE TAppInfoDialog {' не обрабатывается. Вы можете использовать -I или --include, чтобы добавить обработку этого кода.

... и это, конечно, означает, что весь класс не проверяется. Если бы я мог заставить cppcheck просто игнорировать "ключевое слово" PACKAGE, это было бы точно правильно, но как это сделать? Включение его исходного определения через include path, похоже, не вариант: затем cppcheck сообщает мне много о заголовках среды VCL Я не могу изменить...

В мануале не описана возможность сделать это, гугл не помогает, в SO нет ответ еще.

В системе отслеживания проблем cppcheck я нашел аналогичную проблему #4707 (Microsoft 'abstract' и 'sealed ' для класса) – cppcheck. Здесь ведущий разработчик предлагает создать файл и (предварительно?) включить его в запуск cppcheck, но я использую версию с графическим интерфейсом, и нет возможности включить один файл. Итак, я попытался добавить директоров в раздел include параметров моего проекта (файл XML), затем я отредактировал соответствующую строку в спецификации файла, но это явно ерунда, потому что этот раздел содержит пути включения .

Что я могу попробовать дальше?


person Wolf    schedule 04.03.2014    source источник
comment
Это с открытым исходным кодом, все ждут вашего патча.   -  person Hans Passant    schedule 04.03.2014
comment
@HansPassant :) Надеюсь, это всего лишь шутка, а вариант уже есть. Например, используя определение того, что cppcheck работает?   -  person Wolf    schedule 04.03.2014


Ответы (1)


Решение состоит в том, чтобы добавить определение PACKAGE (пустое) в файл проекта:

<?xml version="1.0" encoding="UTF-8"?>
<project version="1">
    <defines>
        <define name="PACKAGE=" />
    </defines>    
</project>

Это решение я наконец нашел в этом небольшом, но ценном описании файла проекта в репозитории проекта cppcheck/gui/projectfile.txt на master · danmar/cppcheck · GitHub

person Wolf    schedule 04.03.2014
comment
Да, чтобы пропустить ПАКЕТ, определение его как пустого - лучшее решение. - person Daniel Marjamäki; 05.03.2014
comment
@DanielMarjamäki Спасибо за официальное заявление :) - Есть ли способ централизовать такие определения проектов (путем включения через конфигурацию)? - person Wolf; 06.03.2014