Argument Übergabe

Argument Übergabe via Register

Falls die Register nicht ausreichen werden weitere Argumente über den Stack übergeben.

Funktionsdeklaration: Sonderfall

Was ist der Unterschied zwischen der Funktionsdeklaration

void
f();

und

void
f(void);

Lokale Variablen

Ist es ineffizienter, wenn man Variablen in Blöcken (z.B. einem if-Block) definiert? Sollte man also lieber alles zu Beginn der Funktion definieren, wie hier:

void
f(void)
{
    int cond;
    int i;

    // ... do something ..

    if (cond>0) {

        // ... do something ...
    }
}

Schöner zum Programmieren ist es, wenn man die Variablen erst da definiert wo man sie braucht. Wenn man viele Blöcke hat und aus jedem Block die Definition nach oben zieht hat man Definitionen der Art i1, i2, ... i10 am Anfang der Definition. Das ist unleserlicher Code und ist damit fehleranfälliger als lesbarer Code. Man will also eher solchen Code:

void
f(void)
{
    int cond;

    // ... do something ..

    if (cond>0) {
        int i;

        // ... do something ...
    }
}

Wieso könnte der zweite Code ineffizienter sein? Ist er es?