code zulässig?
-
hallo,
kann mir jemand folgenden code erklären bzw. sagen ob der zulässig ist?
if (pi->fd2 >= 0 && FD_ISSET(pi->fd2, &fdr) && ((n=getfreeslot(&pidptr)), (sinl = sizeof(sin)), (sockfd=sox_accept(pi->fd2, (struct sockaddr *)&sin, &sinl))) >= 0) { accepted(n, sockfd, &sin, sinl, argv[argn], ptrs); }
mir ist nicht klar, was bei "if" passiert...
&& ist ein logisches und, ok, aber was macht ((blabla),(code),(bla)) ?
-
((blabla),(code),(bla))
führt erst blabla aus, dann code, dann bla. Ganz übler Codingstil meiner Meinung nach. Also passiert:
((n=getfreeslot(&pidptr))
(sinl = sizeof(sin))
(sockfd=sox_accept(pi->fd2, (struct sockaddr *)&sin, &sinl))) >= 0Es ist also letztendlich wie:
((n=getfreeslot(&pidptr));
(sinl = sizeof(sin));
if (pi->fd2 >= 0 && FD_ISSET(pi->fd2, &fdr) && (sockfd=sox_accept(pi->fd2, (struct sockaddr *)&sin, &sinl))) >= 0)Kann sein, dass da jetzt ein paar Klammern zuviel oder zuwenig sind.
Auf jeden Fall ist der Code so scheiße und kaum zu lesen.
-
danke.
der code stammt von Courier IMAP Daemon.
http://www.courier-mta.org/imap/wie würdest du es machen? mehrere IFs verschachteln? (dann wären wenigstens nicht mehr so viele && operatoren nötig)