- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
typedef void Start1(void);
struct Kernel
{
Start1 Start;
} kernel;
void Kernel::Start(void)
{
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+11
typedef void Start1(void);
struct Kernel
{
Start1 Start;
} kernel;
void Kernel::Start(void)
{
}
Как всегда оттуда.
http://ideone.com/sZgRua
Через месяц дать ассемблер - они офигеют как всё удобно и будут использовать его возможности по назначению.
Ещё через месяц дать сишку - они опять офигеют как всё удобно и будут писать очень красивый код.
Ещё через месяц - Java - они опять офигеют и начнут писать заебись какие крутые паттерны и даже свои придумают.
Элсо так я делал.
просто пример взят фактически из документа стандарта
т.е. они этим как бы хвалятся
а я чего-то не догоняю
и что в сишке это нереально решало
и что мне покажут пример, где это на самом деле пригождается
ну типа че париться
надо быть узнаваемым в толпе, отличный стиль, например - http://ideone.com/LJzWgO
Кстати так тоже писал. А вот тому сигналу что-нибудь присвоить можно в этой строке? Не определюсь куда = вставить.
А если этот прототип превратить в указатель, то куда надо вставить?
Вот так по идее.
А где присвоение этому указателю написать?
http://ideone.com/MEHOcp
P.S. Дефекейт++ постом ниже прав.
То есть присваивать этому указателю как-то так?
http://ideone.com/85biUm
зы - отличная капча "5555" тут у меня
Опа... Внезапно...
Не ожидал.
signal - вот имя, из которого надо будет делать указатель на функцию
ну а вставлять - после всей декларации, как обычно
Указатель на функцию, возвращающий функцию, возвращающую int?
P.S. Самому не нравится стиль описания указателей на функции в сишечке.
это (форвард-)декларация функции с именем f, которая не принимает аргументов, и возвращает указатель на функцию, не принимающую аргументов и возвращающую int
т.е. если ты соберешься использовать f далее по тексту - линкер должен будет её где-нибудь найти
http://ideone.com/XYSU9j
Кстати еще мне очень не нравится сишное описание массивов и указателей. В той же жабе и паскале в одной строке всегда описывают переменные одного типа. В сишке же в одной строке описывать можно хуйпойми че.
туда же в кассу:
а это как раз единственное полезное
ну а виндоблядские копрофильные дефайны typedef ... FOO, * LPFOO, * LPTFOO; typedef const FOO CFOO, * LPCFOO, * LPTCFOO; пускай сами жрут
явно для дебилов сделано, которых звездочки в коде отвлекают, а вот капслок - да нормально, чо
Бляяяя. Как меня это вымораживает. Хочется взять и уебать. Это ты правильно подметил.
+++
LPCSTR, LPCWSTR, LPCTSTR...
Это я склонен воспринимать как контрпример, т.е., когда такие typedefs оправданы
Разве что LP (Long Pointer) выглядит мусором.
как это юникодные символы wchar_t могут быть определены по-разному? с LPTSTR не спутал?
а в LPCSTR utf-8 программист не может хранить?
совсем забыл, недоработочка - обязательно надо использовать префикс/суффикс SZ, а то вдруг кто не поймет, что на конце строки ноль
Но отличать от просто указателя все равно имхо полезно.
Не думаю. Понимание этой хрени просто так не придет со стажем. Нужно просто быть немного двинутым, тогда захочешь это изучить специально. Многие программеры работают всю жизнь на си и не знают как написать
void (*(&(*OMG[])())[]) (void (*)(void (*(*[])())()));
Конечно такое нужно лишь из спортивного интереса или если встретил в своем проекте код гения, которого уволили.
Придет. Хотя быстро и точно писать и читать такие длинные херни не получится. Но умеренного размера - вполне.
Так если ты этим не пользуешься, как и каллеги по цеху, то почему понимание этого должно прийти?
Конечно все эти штуки простые и короткие, а все сложное завернуто в typedef... но ведь и в приведенном выше коде нет ничего нового. Все те же правила, что и в типичном коде. Ну разве что кроме бесполезных возвращаемых массивов.
Если не совсем туплю - это наследственное заболевание, от сишки досталось.
> int c();
Так это же классический прототип функции. Аля
b - указатель на инт;
c - прототип функции, возвращающей инт;
d - прототип функции, возвращающей указатель на инт;
e - указатель на функцию, возвращающую инт;
f - прототип функции, возвращающей указатель на функцию, возвращающую инт (хаскель блять какой-то).
Действительно очень сомнительно то, что можно в одной декларации смешать прототипы с прочими переменными.