C and controlling debug stuff (something, almost, like Log4j) ;)
In case you are not aware of the macros ;) I am sure you are aware, but, just in case :)
int f(int a, int b) {
#ifdef PROFILER
BeginProfiling("f");
#endif
...
#ifdef PROFILER
EndProfiling();
#endif
}
Then, you can control it by doing this
// when you want to profile #define PROFILER // when you don't want to profile //#define PROFILER
In case you are not aware of function pointers ;)
#include <stdio.h>
void (*doprofiling)(void);
void profile()
{
printf("I am profiling\n");
}
void no_profile()
{
printf("I am not profiling\n");
}
void fun() {
doprofiling();
}
int main()
{
doprofiling = profile;
fun();
doprofiling = no_profile;
fun();
return 0;
}
Then, you can switch in the code dynamically
gcc -o profile ./profile.c ./profile I am profiling I am not profiling
Or, you can use something like this, and you can apply different decorators to different functions
#include <stdio.h>
void doprofiling(void (*proffun)(void)) {
proffun();
}
void profile()
{
printf("I am profiling\n");
}
void no_profile()
{
printf("I am not profiling\n");
}
void fun_prof() {
void (*decorator)(void) = profile;
doprofiling(decorator);
}
void fun_no_prof() {
void (*decorator)(void) = no_profile;
doprofiling(decorator);
}
int main()
{
fun_prof();
fun_no_prof();
return 0;
}
And, you can still dynamically apply it in the code.
> gcc -o ./profile ./profile.c > ./profile I am profiling I am not profiling
September 15th, 2017 in
main entries