Как настроить CppCheck, чтобы препятствовать использованию функции - PullRequest
0 голосов
/ 14 ноября 2018

Чтение CppCheck Списка проверок и checkfunctions.h Я заметил функцию:

Предупредить, если вызывается функция, использование которой не рекомендуется

Хотя я не понял, как это настроить. Конкретнее хочу

  1. Одна из моих собственных реализованных функций не рекомендуется
  2. Функция третьей стороны (например, OpenCV cv::imwrite()) не рекомендуется. Я связываю предварительные сборки этой библиотеки, чтобы было сложно (но не невозможно) изменить исходный код для достижения этого

Как я могу аннотировать эти функции или как добавить их в список CppCheck "functions non grata"?

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Проверка использует конфигурацию. Ничто не жестко закодировано. Напишите собственный файл cfg и используйте --library для его загрузки.

Вы можете написать файл cfg вручную, это формат xml. Или вы можете использовать графический интерфейс (это не лучший графический интерфейс, но imho он работает).

Если у вас есть функция foo, которая устарела, вы напишите что-то вроде:

<function name="foo">
  <warn severity="style" alternatives="bar" reason="Deprecated"/>
  <arg nr="1"/>
</function>

Вы также можете указать собственное предупреждающее сообщение:

<function name="foo">
  <warn severity="warning">Do not use foo(). Use bar() instead.</warn>
  <arg nr="1"/>
</function>

Для каждого аргумента, который принимает функция, необходимо указать <arg>.

Дайте мне знать, если у вас есть проблемы.

0 голосов
/ 14 ноября 2018

Я не уверен, существует ли общий способ проверки использования всех сторонних функций.Вероятно, @Daniel Marjamäki - лучший человек, чтобы ответить на это.Но вы пытались создать правило для этого?

Если вы хотите проверить точную подпись функции, вы можете получить что-то вроде этого:

<?xml version="1.0"?>
<rule version="1">
    <pattern>cv::imwrite\(\)</pattern>
    <message>
        <id>discouragedFunction</id>
        <summary>The use of the function cv::imwrite is discouraged.</summary>
    </message>
</rule>

Или если вы хотите что-то еще на общая сторона , вы можете получить что-то вроде этого:

<?xml version="1.0"?>
<rule version="1">
    <pattern>cv::[_a-zA-Z][_a-zA-Z0-9]+\(\)</pattern>
    <message>
        <id>discouragedFunction</id>
        <summary>The use of the function opencv functions are discouraged.</summary>
    </message>
</rule>
...