Hallo Li,
Um ein C-Proggi nicht zur fetten Bremse zu machen, gibt es
bestimmt einige Konstrukte, die man niemals bauen sollte. Gibt
es dazu eine FAQ oder sowas in der Richtung? Oder kennt jemand
alles aussm Kopp?
Als Konstrukte meine ich solche Sachen wie eine
switch-Anweisung
in einer switch-Anweisung in einer switch-Anweisung, wobei ich
nicht weis ob das gerade schlimm ist.
switch:
Wenn die Case-Werte schön eine Reihenfolge bilden, also z.B. 3,4,5,6, dann erzeugen die meisten Compiler eine Sprungtabelle, was sehr schnell ist, andernfalls wird eine verschachtelte if … else if… Konstruktion erzeugt.
// sprungtabelle:
switch (i)
{
case 2: f2(); break;
case 3: f3(); break;
case 4: f4(); break;
case 5: f5(); break;
}
Erzeugter Pseudocode:
tabelle[4] = {LBL\_1, LBL\_2, LBL\_3, LBL\_4};
IF ((i \>= 2) AND (i
Pointer und array:
Insbesondere in Schleiffen sin Pointer schneller als arrays:
// schlecht
int s[10];
int i;
for (i = 0; i s + sizeof(int) \* i;
}
Hier muss für jeden durchlauf eine Addition und eine multiplikation durchgeführt werden.
// gut
int s[10];
int \*sp;
int i;
sp = s;
for (i = 0; i s + sizeof(int)
}
Hier ist nur eine Addition pro Durchlauf nötig. Hinzu kommt noch das viele CPUs die Anweisung: Abspeichern und Incrementieren in einem eizigen Befehl ausführen können (PUSH und POP).
Mfg Peter(TOO)