Both gcc and clang define __COUNTER__
marco:
Defined to an integer value that starts at zero and is incremented each time the COUNTER macro is expanded.
Check following code:
# cat foo.c
#include <stdio.h>
void foo1(void)
{
printf("%s:%d\n", __func__, __COUNTER__);
}
void foo2(void)
{
printf("%s:%d\n", __func__, __COUNTER__);
}
# cat bar.c
#include <stdio.h>
void bar1(void)
{
printf("%s:%d\n", __func__, __COUNTER__);
}
void bar2(void)
{
printf("%s:%d\n", __func__, __COUNTER__);
}
# cat main.c
#include "foo.h"
#include "bar.h"
int main(void)
{
foo1();
foo2();
bar1();
bar2();
return 0;
}
Run the program:
# ./main
foo_1:0
foo_2:1
bar_1:0
bar_2:1
You can see for every translate unit (.c
) file, the __COUNTER__
begins at 0
.
P.S., the code can be referenced here.
Very useful for performance evaluation !