Ну кому в голову пришел такой язык?
Jan. 17th, 2007 11:55 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Оригинальный код:
((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
Date: 2007-01-17 10:27 am (UTC)Приведем прием (позаимствованный из журнала "Communications of
the ACM"), позволяющий прояснить смысл описания. Описание на Си переводится в описа-
ние в стиле языка Algol-68. Далее
Приведем несколько примеров, из которых ясен и способ преобразования:
то есть f - функция, возвращающая указатель на функцию, возвращающую целое.
f - массив указателей на функции, возвращающие целые. Обратно: опишем g как указа-
тель на функцию, возвращающую указатель на массив из 5и указателей на функции, возв-
ращающие указатели на целые.
Помнится, когда-то писал программку, которая по этому алгоритму "раскручивает" навёрнутые описания. А то одни скобочки. Лисп блять.
no subject
Date: 2007-01-17 11:35 am (UTC)no subject
Date: 2007-01-17 11:50 am (UTC)Ура! Холи вор!Чего это он угрёбищный? :(no subject
Date: 2007-01-17 11:52 am (UTC)no subject
Date: 2007-01-17 06:17 pm (UTC)no subject
Date: 2007-01-17 12:04 pm (UTC)no subject
Date: 2007-01-17 01:14 pm (UTC)no subject
Date: 2007-01-17 01:54 pm (UTC)