Получение имени функции в C - PullRequest
2 голосов
/ 27 сентября 2011

У меня есть такая программа,

void test(char* a)
{   
    printf("%s",a); // Trying to print the function name "add" here
    return;
}

int add(int,int)
{
  test(__FUNCTION__); // I need the function name add to be passed to the test function
  ...................
  ....................
}

Но при сборке я получаю сообщение об ошибке в компиляторе C (gcc flavor), например,

передача аргумента 1 'test' отбрасывает квалификаторы из целевого типа указателя

Пожалуйста, посмотрите на это,

/ R

Ответы [ 2 ]

6 голосов
/ 27 сентября 2011

С здесь :

Идентификатор __func__ неявно объявляется переводчиком, как если бы сразу после открывающей скобки каждого определения функции было объявлено

Появилось
static const char __func__[] = "function-name";

, где имя-функции - это имя лексической функции.Это имя является неукрашенным именем функции.

__FUNCTION__ - это другое имя для __func__.

Итак, вы пытаетесь передать const char * вchar *, отбрасывая квалификатор const.Поскольку в вашей функции test вы не изменяете переданную строку, измените ее тип параметра на const char *, обещая вызывающей стороне, что вы не изменяете ее строку.

Кстати, чтобы получитьconst Правильность правильно, вы всегда должны помнить об объявлении указателей как const, если они являются параметрами «только для ввода».

2 голосов
/ 27 сентября 2011

Измените подпись test на

void test(const char* a)

GCC жалуется, что вы конвертируете указатель в константный строковый литерал в изменяемый указатель, вызывая test.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...