Правило CppCheck не показывает #define, комментарий

Я создаю собственное правило для cppCheck. Когда я создаю правило, например, не разрешать #define в проекте. Но --rule=.+ не показывает #define в моем тестовом проекте. Есть ли какой-либо параметр или флаг для cppcheck, чтобы показать #define в моем коде?

мой файл правил:

<?xml version="1.0"?>
<rule version="1">
       <pattern>#define</pattern>
</rule>

мой пример:

#define TEST 1

int main() {
    int a = TEST;
    return 0;
}

person BulletRain    schedule 16.10.2019    source источник
comment
not show #define — создайте MCVE — минимальный воспроизводимый пример, включая шаги по созданию пользовательского правила? Как вы добавили пользовательское правило? На каком коде вы тестировали? Пожалуйста, включите наименьший возможный исходный код вашего тестового проекта, где #define не отображается.   -  person KamilCuk    schedule 16.10.2019
comment
Спасибо за ваш комментарий. я отредактировал свой вопрос   -  person BulletRain    schedule 16.10.2019
comment
С какой стати вы не позволили бы #define? Как вы планируете писать охранники заголовков без него?   -  person Lundin    schedule 16.10.2019


Ответы (1)


Документ writing-rules-2.pdf по адресу https://sourceforge.net/projects/cppcheck/files/Articles/ сообщает: «Данные Cppcheck предварительно обработаны. Комментарии, #define, #include и т. д. отсутствуют».

В качестве альтернативы вы можете создать дамп XML, используя cppcheck --dump yourfile.c, и постобработать дамп, например. скриптом Python. Строка #define TEST 1 вашего примера является частью разделов rawtokens и directivelist. Несколько надстроек Cppcheck делают это таким образом (например, надстройка Python MISRA-C). См. каталог «addons» Cppcheck на GitHub. В этом каталоге также есть вспомогательный скрипт Python cppcheckdata.py, который считывает файл дампа и создает списки объектов для токенов, функций и т. д.

person Mathias Schmid    schedule 16.10.2019