Следующий код приведен из примера 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*
не имеет имени? Разрешено ли это?