объявление указателя на функцию - PullRequest
1 голос
/ 29 сентября 2010

давайте предположим, что у меня есть этот фрагмент кода:

void foo_for_foo( void some_function(int, int))     <------
{
    int x = 5;
    some_function(x, x);
}

а также этот (на самом деле то же самое с небольшой разницей)

void foo_for_foo( void (*some_function)(int, int))  <-------
{
    int x = 5;
    some_function(x, x);
}

мой вопрос, имеет ли значение, как я пишу это

void foo_for_foo( void some_function(int, int))

или

void foo_for_foo( void (*some_function)(int, int))

причина в обоих случаях я получаю одинаковый результат заранее спасибо

Ответы [ 2 ]

1 голос
/ 29 сентября 2010

Да, обе версии означают одно и то же: функции и указатели функций конвертируются друг в друга (в обе стороны).См. Также раздел 4 в этом списке странного поведения стандарта C:

http://www.eecs.berkeley.edu/~necula/cil/cil016.html#toc32

По сути, происходит то, что указатели преобразуются в функции или функции в указатели несколько раз вне интуитивно понятно.

0 голосов
/ 29 сентября 2010

Обе версии одинаковы, поскольку вы по сути передаете указатель на функцию.

Хотя код верен, часто лучше использовать typedef для указателя на функцию, что улучшает читаемость кодаи делает для более краткого, элегантного кода.

Примерно так:

typedef void (*FooFunction)(int,int);

void foo_for_foo (FooFunction fnc)
{
    int x = 5;
    fnc(x, x);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...