Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить

Re: Вопросы по С/С++ (СИ)

Чт окт 18, 2018 15:32:10

Задача была такой. https://radiokot.ru/forum/viewtopic.php ... 5#p3484785
Там есть хоть намек про пакеты?

PS.
Досик, что ты постоянно злой как собака? Если в личной жизни кто-то не так, не выплескивай злость в сеть!

Re: Вопросы по С/С++ (СИ)

Чт окт 18, 2018 18:00:22

Мурик писал(а): что ты постоянно злой как собака?
WatchDog.Mode = MODE_NOT_FIT_DOGMA_DETECTED :)))

Re: Вопросы по С/С++ (СИ)

Чт окт 18, 2018 20:26:25

Там есть хоть намек про пакеты?


Какая задача, ты вообще о чем? :))) ТовариСЧ всего лишь тыркается.
Сразу видно, что подобное ты не решал никогда и серьезнее своих свистоперделок не делал...

Re: Вопросы по С/С++ (СИ)

Пт окт 19, 2018 21:02:19

Слабо сходу сказать, что напечатает этот код и почему?:

Код:
#include <stdio.h>

int main()  {
    char *u = "*u = %u\n";
   
    printf(u, (!u)[u]);

    return 0;
}


:))

Re: Вопросы по С/С++ (СИ)

Пт окт 19, 2018 21:34:06

*u = <ascii код звездочки>
Так?

Re: Вопросы по С/С++ (СИ)

Пт окт 19, 2018 21:48:46

Я не спрашивал, может ли кто-нибудь это скомпилировать и запустить.

Re: Вопросы по С/С++ (СИ)

Пт окт 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 код в десятичном основании.

Re: Вопросы по С/С++ (СИ)

Сб окт 20, 2018 00:26:52

Эх, пропала интрига. :)

Сюжет был завязан на то, что u[n] == n[u] == *(n * sizeof(char) + u)

Re: Вопросы по С/С++ (СИ)

Сб окт 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);}

Re: Вопросы по С/С++ (СИ)

Сб окт 20, 2018 20:04:14

Это обфускация. Не интересно.

Re: Вопросы по С/С++ (СИ)

Сб окт 20, 2018 20:25:15

Эх, пропала интрига. А ведь так писать МОЖНО, почему бы так всегда и не писать?

кстати, там не совсем обфускация. точнее, не только она. там достаточно экзотический с точки зрения программистов микроконтроллеров рекурсивный вызов main...

Re: Вопросы по С/С++ (СИ)

Сб окт 20, 2018 20:52:14

Разбирать неинтересно, но выводит и на самом деле интересно. Неожиданно даже.

Re: Вопросы по С/С++ (СИ)

Сб окт 20, 2018 20:58:10

Эх, пропала интрига.

Она и не возникала.

Разбирать неинтересно, но выводит и на самом деле интересно. Неожиданно даже.

The International Obfuscated C Code Contest

Re: Вопросы по С/С++ (СИ)

Вт окт 23, 2018 22:37:10

Еще попалось забавное: настоящие фанаты и тонкие ценители оператора goto не брезгуют использовать его даже в качестве параметра макроса. Ну, чтобы жизнь, значит, медом не казалась, если кому в голову придет за отладку браться.

Код:
 LWIP_ERROR("tcp_listen: pcb already connected", pcb->state == CLOSED, res = ERR_CLSD; goto done);

Это фрагмент из репозитория mbed. Там таких шедевров много.

Re: Вопросы по С/С++ (СИ)

Ср окт 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 */

Ну так это со всяким макросом приходится за "верительными грамотами" вначале ходить. Эдак в любой Ц++-ной программе возмущаться можно - мол "понапридумывали тут левых сущностей". ;-)

Re: Вопросы по С/С++ (СИ)

Ср окт 24, 2018 12:28:21

Убеждаюсь, что нет такого говнокода, который кем-нибудь не был бы признан совершенством.

Re: Вопросы по С/С++ (СИ)

Ср окт 24, 2018 17:35:11

Убеждаюсь, что нет такого говнокода, который кем-нибудь не был бы признан совершенством.

Проблема-то в чём? Непривычно? Непонятно? Скрытая функциональность? Неочевидные проблемы при выполнении?
Забавное решение очевидной каждому практикующему ситуации. Не идеал - но страницы кода экономит. lwIP - лошадка хорошая - не надо на неё гадости гадить. ;)

Re: Вопросы по С/С++ (СИ)

Ср окт 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)

Попробуйте определить, что не так с этой функцией. Заодно лишний раз вдохновитесь и читабельностью и самой "лошадкой".

Re: Вопросы по С/С++ (СИ)

Ср окт 24, 2018 19:33:53

Попробуйте определить, что не так с этой функцией.

(pcb->state == LISTEN) всегда false?
Ну да, макросом немного "замаскировали", хотя и с ним вполне можно увидеть.


Или еще что?

Re: Вопросы по С/С++ (СИ)

Ср окт 24, 2018 20:09:15

Ну да, макросом немного "замаскировали", хотя и с ним вполне можно увидеть.

"Можно" -- это когда прямо под нос все составляющие положили и пальцем тыкнули, куда смотреть. На гитхабе же только последняя версия этого модуля уже больше двух лет лежит без изменений, но никто на "можно увидеть" не сподобился. А скорее всего оно там живет гораздо дольше. Лень историю рыть.
Ответить