2015-03-25 2 views
1

Может кто-нибудь, пожалуйста, решить следующую проблему для меня:Как переименовать имя функции C в определении во время выполнения

Проблема: Пусть говорят, что есть две функции foo() и bar() определены как

void bar() 
{ 
    printf("bar\n"); 
} 

void foo() 
{ 
    printf("foo\n"); 
    bar(); 
} 

Так , здесь я хочу изменить строку имени функции на bar_test в ее определении, но не в вызове. Это должно быть время выполнения, и исходный код не должен изменяться.

Ожидаемый выход, как показано ниже:

void bar_test() 
{ 
    printf("bar\n"); 
} 

void foo() 
{ 
    printf("foo\n"); 
    bar(); 
} 

Благодаря

+3

Что вы пытаетесь достичь, выполнив это? C не имеет понятия о времени выполнения функции (кроме как отладочных символов). –

+1

Вы не можете переименовывать функции, переменные, классы, ..... на любом языке программирования. В c, имя представляет указатели на местоположение в памяти, и это статично. Кроме того, даже если вы смогли изменить его имя, вам придется изменить его вызов в исходном коде. –

+0

Программа не выводит себя, поэтому ваш «ожидаемый результат выглядит следующим образом» не имеет никакого смысла. – hobbs

ответ

3

Один из способов будет иметь макрос как

#define bar() bar_test() 

Теперь вызывающему bar() со стороны макровызовов bar_test()

Функция, которая определена, должна быть b e называется по стандарту. Невозможно изменить имя функции во время выполнения, и это тоже не имеет смысла.

+0

На самом деле, у меня проблема в c модульной тестовой среде (макетные функции). Если в одном файле определены две функции, тогда ассемблер разрешает вызов функции, прежде чем компоновщик имеет возможность его обернуть. Выполняя эту задачу, я хочу, чтобы функция bar() не была определена, чтобы компоновщик мог привязать ее к функции __wrap_bar(). –

+0

Спасибо Gopi ... но таким образом, имя функции bar() во время ее вызова также будет изменено, что нежелательно. Это внутри определения foo(), bar должен оставаться таким, какой он есть. –

+0

Эта проблема возникает как решение другой проблемы: http://stackoverflow.com/questions/29212963/how-to-overcome-from-the-limitation-of-mock-functions –

Смежные вопросы