Нет ничего, что поддерживается во всех реализациях, которые будут делать то, что вы хотите. Я иногда оказывался в той же ситуации, когда мне нужно было отслеживать вызывающих абонентов для нескольких методов, и делал что-то вроде следующего:
#ifdef TRACKBACK
int foo(int arg1, int arg2, const char * file, int line)
{
SEND_TO_LOG("foo", file, line);
#else
int foo(int arg1, int arg2)
{
#endif
...
...
Конечно, это вызывает головную боль на вызывающем конце, поэтому вы захотите сделать что-то вроде:
#ifdef TRACKBACK
#define TRACKING, __FILE__, __LINE__
#else
#define TRACKING
#endif
Тогда звонок:
foo(arg1, arg2 TRACKING); //note the lack of the comma
Это делает трюк, когда все остальное терпит неудачу.