Я использую версию 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 Я не могу поменять…
Руководство не описывает вариант сделать это, Google не помогает, так что пока нет ответа.
В трекере проблем cppcheck я обнаружил аналогичную проблему # 4707 («абстрактное» и «закрытое» расширение Microsoft для класса) — cppcheck. Здесь ведущий разработчик предлагает создать файл и (предварительно?) Включить его в прогон cppcheck, но я использую версию с графическим интерфейсом, и нет возможности включить один файл. Поэтому я попытался добавить директоров в раздел include моих параметров проекта (файл XML), затем отредактировал соответствующую строку в спецификации файла, но это явно бессмыслица, потому что этот раздел содержит включить пути.
Что я могу попробовать дальше?
Решение состоит в том, чтобы добавить определение 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
Других решений пока нет …