Ну кому в голову пришел такой язык?
Оригинальный код:
((void (*)())0)();
Чтобы понять происходящее, я его сначала откомпилировал, затем дизассемблировал, получилось такое:
xor eax,eax
call eax
Затем я это дело разделил собственно на объявление указателя на функцию и на вызов:
typedef void (*fptr)();
void main(){
((fptr)0)();
}
Особо бесит указание имени объявляемого типа в середине объявления. Очень логично. Это как если бы присвоение var1=var2 в стиле va(=var1)r2;
((void (*)())0)();
Чтобы понять происходящее, я его сначала откомпилировал, затем дизассемблировал, получилось такое:
xor eax,eax
call eax
Затем я это дело разделил собственно на объявление указателя на функцию и на вызов:
typedef void (*fptr)();
void main(){
((fptr)0)();
}
Особо бесит указание имени объявляемого типа в середине объявления. Очень логично. Это как если бы присвоение var1=var2 в стиле va(=var1)r2;
no subject
Приведем прием (позаимствованный из журнала "Communications of
the ACM"), позволяющий прояснить смысл описания. Описание на Си переводится в описа-
ние в стиле языка Algol-68. Далее
Приведем несколько примеров, из которых ясен и способ преобразования:
то есть f - функция, возвращающая указатель на функцию, возвращающую целое.
f - массив указателей на функции, возвращающие целые. Обратно: опишем g как указа-
тель на функцию, возвращающую указатель на массив из 5и указателей на функции, возв-
ращающие указатели на целые.
Помнится, когда-то писал программку, которая по этому алгоритму "раскручивает" навёрнутые описания. А то одни скобочки. Лисп блять.
no subject
(no subject)
(no subject)
(no subject)
no subject
no subject
(no subject)