Имя параметра функции Capture C - PullRequest
0 голосов
/ 26 марта 2019

Мне нужно получить имя функции, которая передается в функцию C.Я надеюсь, что какой-нибудь макрос c, который позволит во время компиляции получить ascii-версию имени функции C.

void foo( void )
{
    // nothing
}

typedef void (*pFunction)( void );

void ScheduleCallback( pFunction fName, int x, int y )
{

    // Is it possible to get the name "foo" in this routine?

} 

main()
{

    ScheduleCallback( foo, 3, 4 );

}

Есть ли макрос для параметра в c?

Я попытался использовать FUNCTION, а затем сделать макрос для вызывающей процедуры, такой как

ScheduleCallback( foo, 3, 4, __FUCNTION__ ).

С этим я бы получил "main".

1 Ответ

3 голосов
/ 26 марта 2019

Как кто-то еще предложил, проще всего жестко закодировать имя и передать его. Чтобы не вводить имя дважды, я обычно использую макрос для такого рода вещей, например:

#define FUNC_WITH_NAME(x) x,#x

typedef void (*pFunction)();

void foo() {
}

void ScheduleCallback(pFunction func, char *name, int x, int y) {
    printf("scheduling %s\n", name);
}


int main() {
    ScheduleCallback(FUNC_WITH_NAME(foo),3,4);
}
...