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))) >= 0

    Es 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)


Anmelden zum Antworten