Как узнать, присутствует ли функция в файле cpp, используя cppcheck?

Я хотел узнать, реализована ли в файле cpp определенная функция.

Например, если a() присутствует в файле cpp. Как написать правило для этого? Я хочу, чтобы он выдавал исключение, если его нет.


person Kaushik Ramachandran    schedule 18.12.2018    source источник


Ответы (3)


инструменты статического анализа кода не используются для поиска ошибок компиляции или компоновки.

Если функция или метод 'a' не объявлены и не определены, компилятор или компоновщик сообщит вам об этом - вы получите сообщение об ошибке.

person 0___________    schedule 18.12.2018
comment
Нет, я хотел, чтобы некоторые файлы cpp реализовывали функцию (например: a()). Можем ли мы указать правила для cppcheck, чтобы увидеть, действительно ли имя функции существует в файле cpp. - person Kaushik Ramachandran; 18.12.2018
comment
компилятор и компоновщик будут применять его. Вы не получите исполняемый файл и будете вынуждены реализовать эти функции. - person 0___________; 18.12.2018
comment
программа не будет успешно скомпонована, если a нигде не определено, возможно, OP хочет убедиться, что функция определена в одном конкретном исходном файле - person 463035818_is_not_a_number; 18.12.2018
comment
Нет. Позвольте мне уточнить вариант использования. У меня есть функция a(). Мне нужно только подмножество файлов cpp для объявления и определения a(). Если это не реализовано разработчиком (как в .cpp, так и в .h), я хочу, чтобы это фиксировалось автоматически. - person Kaushik Ramachandran; 18.12.2018
comment
Если он не определен и не реализован - и он используется где-то в коде, вы его не скомпилируете/слинкуете. Если он не используется - он не нужен. Инструменты статического анализа кода используются для предупреждения программистов, если они обнаружат подозрительные языковые конструкции, которые могут повлиять на выполнение программы. Но в первую очередь порограмма должна скомпилировать и связать - person 0___________; 18.12.2018
comment
Я бы не стал использовать cppcheck для принудительного применения чего-то подобного - неправильный инструмент для работы, как говорили другие. Я бы создал отдельную цель сборки (например, в make-файле), которая зависит только от двух исходных файлов: один содержит main(), который объявляет и вызывает a(), не определяя его, а другой требуется для его определения. Сборка этой цели будет успешной только в том случае, если требуемый исходный файл реализует эту функцию. При необходимости повторите для всех таких функций и файлов, необходимых для их реализации. Затем создайте фиктивную цель сборки, которая зависит от всех остальных.... - person Peter; 18.12.2018

Если CppCheck не может обнаружить такую ​​проверку, вы можете попробовать CppDepend и его язык запросов кода CQLinq для создания ваши пользовательские правила.

from file in Files where file.ChildMethods.Where(m=>m.Name=="a").Count()==0 select file
person James from CppDepend Team    schedule 24.12.2018

Я разработчик Cppcheck.

Cppcheck имеет «правила» и «дополнения». «Правило» выполняется с помощью «--rule». Насколько я вижу, с помощью «правила» вы не можете это проверить.

С «аддоном» вы определенно можете реализовать это. Хорошим началом будет просмотр списка областей действия. Если вы видите область действия для "a()", вы можете увидеть, где находится тело области.

Вы можете прочитать больше об аддонах в руководстве cppcheck. http://cppcheck.sourceforge.net/manual.pdf

Глава 12.

person Daniel Marjamäki    schedule 20.12.2018