Недавно я узнал, что это законно C:Альтернативный синтаксис функций C, принимая другую функцию в качестве параметра
#include <stdio.h>
int foo(int bar(int))
{
return bar(42);
}
int bar(int x)
{
return x * 42;
}
int main()
{
printf("Baz = %d\n", foo(bar));
return 0;
}
компилируется без предупреждений и работает как и ожидалось (компилирует и отлично работает даже в качестве программы C, а не C++)
rep ~/Documents $ g++ -Wall test.cpp
rep ~/Documents $ ./a.out
Baz = 1764
rep ~/Documents $
Почему не этот синтаксис используется чаще или даже упоминается в любом месте?
Интересно ... не видел этот синтаксис перед собой. Ожидал бы, что подпись будет читать 'int foo (int (* bar) (int))'. – bgoldst
В списках параметров типы функций настраиваются на указатель на функцию, точно так же, как тип массива настраивается на указатель на элемент. –
Это точно так же, как 'int foo (int (* bar) (int))'. Не уверен, почему он часто не используется. – 0x499602D2