- 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)
{
}
Как всегда оттуда.
LispGovno 06.11.2012 17:13 # +1
http://ideone.com/sZgRua
LispGovno 06.11.2012 17:16 # +1
defecate-plusplus 06.11.2012 17:38 # +1
Fai 06.11.2012 17:51 # +1
Через месяц дать ассемблер - они офигеют как всё удобно и будут использовать его возможности по назначению.
Ещё через месяц дать сишку - они опять офигеют как всё удобно и будут писать очень красивый код.
Ещё через месяц - Java - они опять офигеют и начнут писать заебись какие крутые паттерны и даже свои придумают.
Fai 06.11.2012 17:14 # +3
defecate-plusplus 06.11.2012 18:03 # +2
LispGovno 06.11.2012 18:04 # 0
LispGovno 06.11.2012 18:07 # 0
Элсо так я делал.
defecate-plusplus 06.11.2012 18:08 # 0
просто пример взят фактически из документа стандарта
т.е. они этим как бы хвалятся
LispGovno 06.11.2012 18:10 # 0
defecate-plusplus 06.11.2012 18:19 # +3
а я чего-то не догоняю
и что в сишке это нереально решало
и что мне покажут пример, где это на самом деле пригождается
ну типа че париться
надо быть узнаваемым в толпе, отличный стиль, например - http://ideone.com/LJzWgO
roman-kashitsyn 06.11.2012 18:25 # +2
defecate-plusplus 06.11.2012 18:27 # +2
bormand 06.11.2012 18:32 # +1
LispGovno 06.11.2012 18:33 # 0
Кстати так тоже писал. А вот тому сигналу что-нибудь присвоить можно в этой строке? Не определюсь куда = вставить.
defecate-plusplus 06.11.2012 18:36 # +2
bormand 06.11.2012 18:36 # +2
LispGovno 06.11.2012 18:39 # 0
А если этот прототип превратить в указатель, то куда надо вставить?
bormand 06.11.2012 18:43 # +4
Вот так по идее.
LispGovno 06.11.2012 18:44 # 0
А где присвоение этому указателю написать?
bormand 06.11.2012 18:47 # +1
http://ideone.com/MEHOcp
P.S. Дефекейт++ постом ниже прав.
LispGovno 06.11.2012 18:49 # 0
То есть присваивать этому указателю как-то так?
defecate-plusplus 06.11.2012 20:18 # +2
http://ideone.com/85biUm
зы - отличная капча "5555" тут у меня
LispGovno 06.11.2012 20:26 # 0
Опа... Внезапно...
Не ожидал.
defecate-plusplus 06.11.2012 18:47 # +2
signal - вот имя, из которого надо будет делать указатель на функцию
bormand 06.11.2012 19:10 # 0
defecate-plusplus 06.11.2012 18:44 # 0
ну а вставлять - после всей декларации, как обычно
LispGovno 06.11.2012 18:12 # 0
Указатель на функцию, возвращающий функцию, возвращающую int?
bormand 06.11.2012 18:20 # +2
P.S. Самому не нравится стиль описания указателей на функции в сишечке.
defecate-plusplus 06.11.2012 18:24 # +3
это (форвард-)декларация функции с именем f, которая не принимает аргументов, и возвращает указатель на функцию, не принимающую аргументов и возвращающую int
т.е. если ты соберешься использовать f далее по тексту - линкер должен будет её где-нибудь найти
http://ideone.com/XYSU9j
bormand 06.11.2012 18:26 # +3
Кстати еще мне очень не нравится сишное описание массивов и указателей. В той же жабе и паскале в одной строке всегда описывают переменные одного типа. В сишке же в одной строке описывать можно хуйпойми че.
defecate-plusplus 06.11.2012 18:33 # +3
туда же в кассу:
bormand 06.11.2012 18:39 # +1
TarasB 06.11.2012 18:56 # +2
а это как раз единственное полезное
defecate-plusplus 06.11.2012 20:11 # +5
ну а виндоблядские копрофильные дефайны typedef ... FOO, * LPFOO, * LPTFOO; typedef const FOO CFOO, * LPCFOO, * LPTCFOO; пускай сами жрут
явно для дебилов сделано, которых звездочки в коде отвлекают, а вот капслок - да нормально, чо
LispGovno 06.11.2012 20:15 # +2
Бляяяя. Как меня это вымораживает. Хочется взять и уебать. Это ты правильно подметил.
bormand 06.11.2012 22:53 # +3
+++
LPCSTR, LPCWSTR, LPCTSTR...
Steve_Brown 07.11.2012 10:22 # −2
Это я склонен воспринимать как контрпример, т.е., когда такие typedefs оправданы
Разве что LP (Long Pointer) выглядит мусором.
defecate-plusplus 07.11.2012 10:41 # +3
как это юникодные символы wchar_t могут быть определены по-разному? с LPTSTR не спутал?
а в LPCSTR utf-8 программист не может хранить?
совсем забыл, недоработочка - обязательно надо использовать префикс/суффикс SZ, а то вдруг кто не поймет, что на конце строки ноль
Steve_Brown 07.11.2012 11:33 # +1
Но отличать от просто указателя все равно имхо полезно.
bormand 06.11.2012 18:35 # +2
LispGovno 06.11.2012 18:39 # +1
bormand 06.11.2012 18:49 # +2
LispGovno 06.11.2012 23:12 # +2
Не думаю. Понимание этой хрени просто так не придет со стажем. Нужно просто быть немного двинутым, тогда захочешь это изучить специально. Многие программеры работают всю жизнь на си и не знают как написать
void (*(&(*OMG[])())[]) (void (*)(void (*(*[])())()));
Конечно такое нужно лишь из спортивного интереса или если встретил в своем проекте код гения, которого уволили.
bormand 07.11.2012 06:34 # +1
Придет. Хотя быстро и точно писать и читать такие длинные херни не получится. Но умеренного размера - вполне.
LispGovno 07.11.2012 07:59 # 0
Так если ты этим не пользуешься, как и каллеги по цеху, то почему понимание этого должно прийти?
bormand 07.11.2012 10:19 # +1
Конечно все эти штуки простые и короткие, а все сложное завернуто в typedef... но ведь и в приведенном выше коде нет ничего нового. Все те же правила, что и в типичном коде. Ну разве что кроме бесполезных возвращаемых массивов.
Vindicar 06.11.2012 21:47 # +1
bormand 06.11.2012 18:15 # +2
Если не совсем туплю - это наследственное заболевание, от сишки досталось.
> int c();
Так это же классический прототип функции. Аля
bormand 06.11.2012 18:24 # +2
b - указатель на инт;
c - прототип функции, возвращающей инт;
d - прототип функции, возвращающей указатель на инт;
e - указатель на функцию, возвращающую инт;
f - прототип функции, возвращающей указатель на функцию, возвращающую инт (хаскель блять какой-то).
Действительно очень сомнительно то, что можно в одной декларации смешать прототипы с прочими переменными.
TarasB 06.11.2012 18:53 # +2