呼び出し元の関数のアドレスを、呼び出し先の関数で得る方法ってありませんか?
下記のコードではHuman関数のアドレスを、Dog関数に引数で渡しているのですが、
引数やグローバル変数などは使わずに得る方法です。

#include <stdio.h>

void Dog(void * p) {
 printf("Dog()  : p    :%p\n", p);
}
int Human() {
 printf("Human() : Human:%p\n", &Human);
 Dog(&Human);
 return 0;
}
int main(void) {
 Human();
 return 0;
}
/* 結果
Human() : Human :004013CB
Dog()   : p    :004013CB
*/