- 1
- 2
- 3
- 4
- 5
- 6
void receivePtrs(void **);
int main() {
L:
receivePtrs((void *[]){ &&L, 0, 0 });
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
void receivePtrs(void **);
int main() {
L:
receivePtrs((void *[]){ &&L, 0, 0 });
}
что делает этот код?
ASD_77 29.08.2021 18:54 # 0
bormand 29.08.2021 18:57 # 0
3.14159265 29.08.2021 23:26 # 0
bormand 29.08.2021 23:27 # +1
ABryCTOBCKuu_nemyx 29.08.2021 23:36 # 0
Desktop 29.08.2021 23:39 # 0
bormand 30.08.2021 02:22 # 0
ABryCTOBCKuu_nemyx 29.08.2021 23:27 # +3
ISO 29.08.2021 18:56 # +2
j123123 30.08.2021 02:18 # +2
У меня про это был говнокод https://govnokod.ru/22794 -> https://govnokod.ru/22794#comment384245 -> https://gcc.gnu.org/legacy-ml/gcc-help/2017-04/msg00051.html
> the compiler treats labels similarly to automatic variables, meaning that their address is considered valid only until the function returns. Optimizations that clone functions need to duplicate labels, and that will break code that smuggles label addresses to outer frames. See PR 80053 comment 2 for a sample that gets "miscompiled": https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80053#c2
Так что надо запрещать инлайн для такой хуйни.
bormand 30.08.2021 02:21 # +1
j123123 30.08.2021 02:48 # +1
Можно и к инлайну прикрутить такое говно, если только хранить не непосредственный адрес, а дельту между "место где у нас goto туда или сюда" и "метка". И тогда можно относительно регистра "RIP" переходить по такому-то смещению. Важно только чтоб везде одинаковый кусок с равными "расстояниями" между метками и goto заинлайнивался.
Janycz 29.08.2021 20:36 # 0
bormand 29.08.2021 20:49 # 0
ASD_77 29.08.2021 21:18 # 0
bormand 29.08.2021 21:38 # 0
ASD_77 29.08.2021 22:55 # 0
bormand 29.08.2021 23:02 # +1
ABryCTOBCKuu_nemyx 29.08.2021 23:04 # +1
bormand 29.08.2021 23:05 # 0
ABryCTOBCKuu_nemyx 29.08.2021 23:07 # +2
https://govnokod.xyz/_24763/#comment-390727
У меня там и && были, и аналог «computed goto» я наговнокодил с помощью патча стека.
ABryCTOBCKuu_nemyx 29.08.2021 23:40 # +3
Цикл:
ABryCTOBCKuu_nemyx 29.08.2021 23:41 # +3
IIIyqpymuHckuu_nemyx 29.08.2021 23:55 # 0
3.14159265 29.08.2021 23:46 # +1
> ...
> _next(&i);
Какой BASIC )))
Очень зачётное говно.
ABryCTOBCKuu_nemyx 29.08.2021 23:50 # 0
ABryCTOBCKuu_nemyx 30.08.2021 00:02 # 0
IIIyqpymuHckuu_nemyx 29.08.2021 23:55 # 0
3.14159265 29.08.2021 23:25 # 0
Подтверждаю.
В приницпе можно прыгнуть внутрь функции, что-то выполнить, а потом вернуться обратно. А-ля GOSUB / RETURN.