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; }
-
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.