Следующий код приведен из примера abo3.c из Insecure Программирование - см. Также Зачем прикладывать extern puts к указателю функции (void(*)(char*))&puts?:
int main(int argv,char **argc) {
extern system,puts;
void (*fn)(char*)=(void(*)(char*))&system; // <==
char buf[256];
fn=(void(*)(char*))&puts;
strcpy(buf,argc[1]);
fn(argc[2]);
exit(1);
}
В частности, эта строка:
void (*fn)(char*)=(void(*)(char*))&system;
Я думаю, что void (*fn)(char*) звучит как лямбда, но я знаю, что это не так.
Тогда, может быть, это только игра с круглыми скобками, где void *fn(char*) является объявлением функции, и эта функция ссылается на system? Но почему параметр (char* не имеет имени? Разрешено ли это?