Обработка «несовместимо» перегруженные имена в Cppcheck

Я застрял в «конфликте» между AnsiStringsSprintfmember function and Cppcheck's built-inСпринтф знание.

В таких случаях, как это,

const char* name = "X";
int version = 1;

return AnsiString().sprintf("%s.H%02d", name, version); // <-- HERE

Я получаю это предупреждение в графическом интерфейсе Cppcheck

Идентификатор: неправильныйPrintfScanfArgNum

Сводка: строка формата sprintf требует 0 параметров, но задан 1.

Сообщение: строка формата sprintf требует 0 параметров, но задан 1.

который показывает, что Cppcheck говорит о sprintf функция, но я использую функция-член класса VCL AnsiString с тем же именем.

Как избавиться от этого ложного срабатывания, я мог бы использовать

  • встроенное подавление: // cppcheck-suppress wrongPrintfScanfArgNum
  • промежуточная переменная: AnsiString result; result.printf(...); return result;
  • sprintf функция, что означает обрабатывать буферное пространство вручную

Но все эти опции работают локально и затрудняют чтение / сопровождение кода.

Как я могу научить Cppcheck различать перегруженные имена?


Редактирование:

  • Я написал переопределение, но имел ввиду перегрузку, я исправил это в текущем тексте.
  • добавлена ​​буквальная инициализация переменных, что важно для name

3

Решение

Интересно.

Да, я согласен, что об этом следует сообщить в http://trac.cppcheck.net. Похоже, ошибки.

Я вижу 2 ошибки.

AST не показывает правильную информацию о типе для AnsiString (), даже когда я добавляю класс AnsiString.

Библиотека не должна соответствовать sprintf в этом коде. Понятно, что какой-то метод вызывается.

2

Другие решения

Это действительно ошибка.[1] Cppcheck 1,75 является умный при проверке строк формата, но, очевидно, только в некоторых случаях, одна из них Второй параметр каждой функции называется printf, так что проблема не имеет ничего общего с AnsiString::sprintf но с каждой альтернативной реализацией.


[1]
# 7726 (Неверно положительный: строка формата проверяется для каждой функции sprintf) — Cppcheck

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector