Frage zu C++ Funktions Aufbau



  • Ich habe vor kurz zlib source code angeschaut, da sehe ich merkwürdige Funktion strukturaufbau, es lässt sich einwandfrei kompilieren.

    normalerweise kenne ich funktion in c++ so

    int hello(int a, int b, int c)
    {
       return 0;
    }
    

    aber hier ohne Datentyp in parameter, zuerst und dann lokale variable außerhalb von geschleifte Klammern. Ich verstehe unten nicht.

    uLong ZEXPORT adler32(adler, buf, len)
        uLong adler;
        const Bytef *buf;
        uInt len;
    {
        unsigned long s1 = adler & 0xffff;
        unsigned long s2 = (adler >> 16) & 0xffff;
        int k;
    
        if (buf == Z_NULL) return 1L;
    
        while (len > 0) {
            k = len < NMAX ? len : NMAX;
            len -= k;
            while (k >= 16) {
                DO16(buf);
    	    buf += 16;
                k -= 16;
            }
            if (k != 0) do {
                s1 += *buf++;
    	    s2 += s1;
            } while (--k);
            s1 %= BASE;
            s2 %= BASE;
        }
        return (s2 << 16) | s1;
    }
    

  • Mod

    Das ist die K&R-Style Schreibweise.

    uLong ZEXPORT adler32(adler, buf, len)
        uLong adler;
        const Bytef *buf;
        uInt len;
    

    In der Parameterliste sind nur die Namen, die Deklarationen der Namen finden darunter statt (und legen deren Typ fest).

    Ist in C++ ill-formed, das wird dann also eine prähistorische C-Lib sein, denn schon laut C99 ist das deprecated.



  • Das ist schon ein bisschen schizophren, weil es in K&R kein const gab 🙂



  • Jepp, am Besten gar nicht erst angewöhnen.


Log in to reply