Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Чт окт 18, 2018 15:32:10
Задача была такой.
https://radiokot.ru/forum/viewtopic.php ... 5#p3484785Там есть хоть намек про пакеты?
PS.
Досик, что ты постоянно злой как собака? Если в личной жизни кто-то не так, не выплескивай злость в сеть!
Чт окт 18, 2018 18:00:22
Мурик писал(а): что ты постоянно злой как собака?
WatchDog.Mode = MODE_NOT_FIT_DOGMA_DETECTED
Чт окт 18, 2018 20:26:25
Там есть хоть намек про пакеты?
Какая задача, ты вообще о чем?
ТовариСЧ всего лишь тыркается.
Сразу видно, что подобное ты не решал никогда и серьезнее своих свистоперделок не делал...
Пт окт 19, 2018 21:02:19
Слабо сходу сказать, что напечатает этот код и почему?:
- Код:
#include <stdio.h>
int main() {
char *u = "*u = %u\n";
printf(u, (!u)[u]);
return 0;
}
Пт окт 19, 2018 21:34:06
*u = <ascii код звездочки>
Так?
Пт окт 19, 2018 21:48:46
Я не спрашивал, может ли кто-нибудь это скомпилировать и запустить.
Пт окт 19, 2018 23:16:39
Я не пробовал, но из кода вроде именно такое вырисовывается.
Добавлено after 3 minutes 10 seconds:
"*u = %u\n" - константная строка, u - указатель на неё. Это же - формат для printf.
Самая тонкость - (!u)[u]. Посколько u - не NULL, то получается 0[u], а это то же самое что и u[0] - то есть '*'. Ну а из-за формата %u будет выведен не сам символ, а его ascii код в десятичном основании.
Сб окт 20, 2018 00:26:52
Эх, пропала интрига.
Сюжет был завязан на то, что u[n] == n[u] == *(n * sizeof(char) + u)
Сб окт 20, 2018 19:02:38
А слабо вот так, с лету, сказать, что будет в результате работы этого кода выведено?
- Код:
#include <stdio.h>
int main(int t,int _,char*a)
{return!0<t?t<3?main(-79,-13,a+main(-87,1-_,
main(-86, 0, a+1 )+a)):1,t<_?main(t+1, _, a ):3,main ( -94, -27+t, a
)&&t == 2 ?_<13 ?main ( 2, _+1, "%s %d %d\n" ):9:16:t<0?t<-72?main(_,
t,"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l,+,/n{n+\
,/+#n+,/#;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l q#'+d'K#!/\
+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# ){n\
l]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#\
n'wk nw' iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c \
;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;\
#'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/")
:t<-50?_==*a ?putchar(a[31]):main(-65,_,a+1):main((*a == '/')+t,_,a\
+1 ):0<t?main ( 2, 2 , "%s"):*a=='/'||main(0,main(-61,*a, "!ek;dc \
i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry"),a+1);}
Сб окт 20, 2018 20:04:14
Это обфускация. Не интересно.
Сб окт 20, 2018 20:25:15
Эх, пропала интрига. А ведь так писать МОЖНО, почему бы так всегда и не писать?
кстати, там не совсем обфускация. точнее, не только она. там достаточно экзотический с точки зрения программистов микроконтроллеров рекурсивный вызов main...
Сб окт 20, 2018 20:52:14
Разбирать неинтересно, но выводит и на самом деле интересно. Неожиданно даже.
Сб окт 20, 2018 20:58:10
Эх, пропала интрига.
Она и не возникала.
Разбирать неинтересно, но выводит и на самом деле интересно. Неожиданно даже.
The International Obfuscated C Code Contest
Вт окт 23, 2018 22:37:10
Еще попалось забавное: настоящие фанаты и тонкие ценители оператора
goto не брезгуют использовать его даже в качестве параметра макроса. Ну, чтобы жизнь, значит, медом не казалась, если кому в голову придет за отладку браться.
- Код:
LWIP_ERROR("tcp_listen: pcb already connected", pcb->state == CLOSED, res = ERR_CLSD; goto done);
Это фрагмент из
репозитория mbed. Там таких шедевров много.
Ср окт 24, 2018 09:11:09
- Код:
LWIP_ERROR("tcp_listen: pcb already connected", pcb->state == CLOSED, res = ERR_CLSD; goto done);
А в чём проблемы? Переход явно прописан, осуществляется в контексте той функции, в которой используется макрос, макрос ничего не скрывает. Для понимания достаточно разок сходить к объявлению макроса и почитать что там про него начертано:
- Код:
/** if "expression" isn't true, then print "message" and execute "handler" expression */
Ну так это со всяким макросом приходится за "верительными грамотами" вначале ходить. Эдак в любой Ц++-ной программе возмущаться можно - мол "понапридумывали тут левых сущностей".
Ср окт 24, 2018 12:28:21
Убеждаюсь, что нет такого говнокода, который кем-нибудь не был бы признан совершенством.
Ср окт 24, 2018 17:35:11
Убеждаюсь, что нет такого говнокода, который кем-нибудь не был бы признан совершенством.
Проблема-то в чём? Непривычно? Непонятно? Скрытая функциональность? Неочевидные проблемы при выполнении?
Забавное решение очевидной каждому практикующему ситуации. Не идеал - но страницы кода экономит. lwIP - лошадка хорошая - не надо на неё гадости гадить.
Ср окт 24, 2018 18:22:50
Проблема-то в чём? Непривычно? Непонятно? Скрытая функциональность? Неочевидные проблемы при выполнении?
А это я сейчас попробую у вас выяснить. По ссылке выше есть замечательный кусок кода с этим самым макросом (привожу в сокращении, только самый сок):
- Код:
struct tcp_pcb *
tcp_listen_with_backlog_and_err(struct tcp_pcb *pcb, u8_t backlog, err_t *err)
{
....
LWIP_ERROR("tcp_listen: pcb already connected",
pcb->state == CLOSED,
res = ERR_CLSD; goto done);
/* already listening? */
if (pcb->state == LISTEN) {
lpcb = (struct tcp_pcb_listen*)pcb;
res = ERR_ALREADY;
goto done;
}
....
}
Учитывая, что:
- Код:
enum tcp_state {
CLOSED = 0,
LISTEN = 1,
....
};
и
- Код:
#define LWIP_ERROR(message, expression, handler) do { if (!(expression)) { \
LWIP_PLATFORM_ERROR(message); handler;}} while(0)
Попробуйте определить, что не так с этой функцией. Заодно лишний раз вдохновитесь и читабельностью и самой "лошадкой".
Ср окт 24, 2018 19:33:53
Попробуйте определить, что не так с этой функцией.
(pcb->state == LISTEN) всегда false?
Ну да, макросом немного "замаскировали", хотя и с ним вполне можно увидеть.
Или еще что?
Ср окт 24, 2018 20:09:15
Ну да, макросом немного "замаскировали", хотя и с ним вполне можно увидеть.
"Можно" -- это когда прямо под нос все составляющие положили и пальцем тыкнули, куда смотреть. На гитхабе же только последняя версия этого модуля уже больше двух лет лежит без изменений, но никто на "можно увидеть" не сподобился. А скорее всего оно там живет гораздо дольше. Лень историю рыть.
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.