Argument Übergabe ================= Argument Übergabe via Register ------------------------------ - Für die Übergabe von Integer werden (in dieser Reihenfolge) die Register `%rdi`, `%rsi`, `%rdx`, `%rcx`, `%r8` und `%r9` benutzt. - Für die Übergabe von Fließkomma Zahlen (Intel Bezeichnung SSE) werden (in dieser Reihenfolge) die Register `%xmm0` bis `%xmm7` benutzt. Falls die Register nicht ausreichen werden weitere Argumente über den Stack übergeben. Funktionsdeklaration: Sonderfall -------------------------------- Was ist der Unterschied zwischen der Funktionsdeklaration --- CODE(type=cc) -------------------------- void f(); -------------------------------------------- und --- CODE(type=cc) -------------------------- 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: --- CODE(type=cc) -------------------------- 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: --- CODE(type=cc) -------------------------- 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?