@damaltor
Na gut ich habe fürchterlich übertrieben mit den 'Meilen'.
Ausserdem gebe ich dir natürlich Recht, dass das ganze eine eigene Vorliebe ist.
Aber der HEX-Output bei deinem Beispiel ergibt immerhin 22 Byte Unterschied zugunsten der IF-Orgie.
Size before:
test.elf :
section size addr
.text 1600 0
Size after:
test.elf :
section size addr
.text 1622 0
Je nachdem, welchen der beiden IF_CODE-Zeilen auskommentiert gibt es da die Unterschiede:
Code:
#include "asuro.h"
//#define IF_CODE 1
#undef IF_CODE
int main ()
{
char wert, a=0;
wert = PollSwitch ();
#ifdef IF_CODE
if(wert==1){
a=wert+1;
}
if(wert==2){
a=wert+2;
}
if(wert==3){
a=wert+3;
}
if(wert==4){
a=wert+4;
}
if(wert==5){
a=wert+5;
}
if(wert==6){
a=wert+6;
}
if(wert==7){
a=wert+7;
}
if(wert==8){
a=wert+8;
}
if(wert==9){
a=wert+9;
}
if(wert==10){
a=wert+10;
}
#else
switch (wert){
case 1:
a=wert+1;
break;
case 2:
a=wert+2;
break;
case 3:
a=wert+3;
break;
case 4:
a=wert+4;
break;
case 5:
a=wert+5;
break;
case 6:
a=wert+6;
break;
case 7:
a=wert+7;
break;
case 8:
a=wert+8;
break;
case 9:
a=wert+9;
break;
case 10:
a=wert+10;
break;
}
#endif
return a;
}
Benutzt man aber die Variante, dass die IF's eigendlich mit "else if" fortgeführt werden sollten um so halbwegs performat zu sein, reduziert sich dieser Vorteil auf popelige 4 Byte bei dem 10-er Beispiel:
-> Und hier liegt ein entscheidender Vorteil vom swtich/case: Performanter, da ein Sprung zur Stelle erfolgt die gerade benötigt wird und eben nicht ein 'rumraten' wohin es denn nun gehen soll.
Size before:
test.elf :
section size addr
.text 1618 0
Size after:
test.elf :
section size addr
.text 1622 0
Code:
#include "asuro.h"
//#define IF_CODE 1
#undef IF_CODE
int main ()
{
char wert, a=0;
wert = PollSwitch ();
#ifdef IF_CODE
if(wert==1){
a=wert+1;
}
else if(wert==2){
a=wert+2;
}
else if(wert==3){
a=wert+3;
}
else if(wert==4){
a=wert+4;
}
else if(wert==5){
a=wert+5;
}
else if(wert==6){
a=wert+6;
}
else if(wert==7){
a=wert+7;
}
else if(wert==8){
a=wert+8;
}
else if(wert==9){
a=wert+9;
}
else if(wert==10){
a=wert+10;
}
#else
switch (wert){
case 1:
a=wert+1;
break;
case 2:
a=wert+2;
break;
case 3:
a=wert+3;
break;
case 4:
a=wert+4;
break;
case 5:
a=wert+5;
break;
case 6:
a=wert+6;
break;
case 7:
a=wert+7;
break;
case 8:
a=wert+8;
break;
case 9:
a=wert+9;
break;
case 10:
a=wert+10;
break;
}
#endif
return a;
}
@radbruch
Ja was soll das denn? Nicht die LIB benutzen, ist das denn erlaubt? 
Der Hinweis von mir bezog sich nur auf die Speicherplatz-Probleme die ich bei dem Asuro-Programmteil hatte um da alle Tests unterzubringen.
Lesezeichen