У меня есть проект с большим количеством файлов, который я хочу добавить простой команде «printf» для каждой функции, найденной в каждом файле. Поделитесь своими идеями о том, как программно определить функцию.Обнаружение функций с использованием C/C++
ответ
В то время как я ненавижу быть , что парень и сразу сказать вам, что вы делаете это неправильно, и я понятия не имею, что вы на самом деле хотите выполнить с этим (не задумываясь о дальнейшем объяснении?), вы получите гораздо больше информации о своем коде с помощью отладчика или профилировщика. Если вы хотите увидеть все вызовы функций, ведущие к некоторому событию в вашей программе (например, сбой), попробуйте gdb. Если вы хотите узнать, как часто вызывается функция, посмотрите на что-то вроде Valgrind или gprof. Следующий вопрос идет подробно о профилирование C++:
What can I use to profile C++ code in Linux?
Но, если вы действительно намерены получить Printf в каждой функции, я хотел бы использовать сторонний инструмент, который делает C++ синтаксический. Попытка написать регулярные выражения для синтаксического анализа C++ сама по себе будет упражнением в расстройстве.
CScope - это, пожалуй, самое простое решение «с полки»: http://cscope.sourceforge.net/ Обратите внимание, что это может иметь проблемы с C++-кодом, который тяжел при программировании шаблонов.
Если вы хотите инвестировать в это более серьезное время, разработка решения с помощью компилятора clang с открытым исходным кодом позволит вам сделать что-то действительно всеобъемлющее. Проверьте http://clang.llvm.org/
пример чего-то на стадионах того, что вы делаете: Get list of methods in class using clang
Надежда, которая помогает ...
Помимо шаблонов, лямбда также будет интересна для CScope. – MSalters
__FUNCTION__
и __LINE__
макрос. Надеюсь, что это будет полезно
#define PRINT_FUNC_NAME() do{printf("Entered the function %s in line no %d",__FUNCTION__,__LINE__)}while(0)
Пример программы
#include<iostream>
using namespace std;
#define PRINT_FUNC_NAME() do {printf("Entered the function %s in line no %d\n",__FUNCTION__,__LINE__) } while(0)
void callme()
{
PRINT_FUNC_NAME();
}
int main()
{
PRINT_FUNC_NAME();
callme();
return 0;
}
Никогда не скрывайте ';' внутри макроса. Вместо этого используйте ';' после каждого вызова. Это помогает сделать код доступным для чтения. Также для такого макроса, который явно выполняет функцию, его гораздо легче читать, когда он определяется как функциональный макрос и называется «PRINT_FUNC_NAME()». –
do {printf ("blahblah") l} while (0) часто рекомендуемый метод использования макросов. – Stolas
@JensGustedt Отредактировано согласно вашему предложению. Спасибо –
- 1. Открытое обнаружение царапин cc
- 2. множественное обнаружение человека с использованием функций HOG
- 3. Обнаружение лица с использованием функций hog
- 4. Обнаружение автомобиля с использованием функций HOG и cvsvm
- 5. Обнаружение объекта в изображении с использованием функций SIFT/SURF
- 6. обнаружение Антивирусных функций
- 7. Flash CC AS3 - с использованием .swc-файлов
- 8. Обнаружение функций в шумовых изображениях
- 9. CPPDepend Обнаружение использования виртуальных функций
- 10. Обнаружение функций SQLServer от ADO.net
- 11. Навигация (с использованием функций)
- 12. с использованием функций Haskell внутри функций
- 13. C++ с использованием функций внутри функций
- 14. Обнаружение Windows 10 Edition с использованием Qt5
- 15. Фидуциальные маркеры - OpenCV - Обнаружение и соответствие функций
- 16. Обнаружение BLOB с использованием OpenCV
- 17. Обнаружение препятствия с использованием Raycast
- 18. Обнаружение рук с использованием OpenCV
- 19. Обнаружение браузера с использованием Angular
- 20. Обнаружение IE с использованием jQuery
- 21. Обнаружение движения с использованием звука
- 22. обнаружение столкновения с использованием createjs
- 23. Обнаружение кромок с использованием вейвлета
- 24. Обнаружение логотипа с использованием OpenCV
- 25. Обнаружение формы с использованием MATLAB
- 26. Обнаружение пакетов с использованием regex
- 27. Обнаружение движения с использованием OpenCV
- 28. Обнаружение лица с использованием opencv
- 29. Обнаружение шеи с использованием opencv
- 30. Обнаружение формы с использованием OpenCv
По программе, вы имели в виду программу, которая будет сканировать файл кода в виде текста файл? –
Как правило, вам нужно проявить некоторые усилия со своей стороны для других, чтобы помочь вам. –
Что вы хотите вычесть? это имя функции –