- posted
19 years ago
AVRGCC instrukcja switch - pytanie
- Vote on answer
- posted
19 years ago
sposob moze by i sie znalazl .. ale to byloby imo zupelnie bezuzyteczne. A cala sytuacja sugeruje ze nie masz kompletnego pojecia o projektowaniu programow :-(
J.
- Vote on answer
- posted
19 years ago
- Vote on answer
- posted
19 years ago
- Vote on answer
- posted
19 years ago
- Vote on answer
- posted
19 years ago
A jednak uwazam ze powinienes rozwazyc dobra rade i przemyslec projekt :-)
J.
- Vote on answer
- posted
19 years ago
przecież to nie ma sensu. Jakby ci kompilator bloki przenumerował, to byś się za cholerę nie pozbierał. Przecież procek ma coś robić, jak wartość zmiennej jest 7, jak coś wstawisz i kompilator ci to na 8 przerobi, to będzie bardach. A kolejność warunków w switchu może być przecież dowolna: najpierw case 217 a potem case 3, potem 23.
Waldek
- Vote on answer
- posted
19 years ago
- Vote on answer
- posted
19 years ago
- Vote on answer
- posted
19 years ago
JS napisał(a):
No nie wiem... Ja bym chętnie usłyszał, jak się powinno pisać programy. :)
- Vote on answer
- posted
19 years ago
O tym, przyznaje, nie pomyslalem.
Uwazaj potem - jedna pomylka z miejscem w tym enumie i dlugo bedziesz szukal co jest zle ..
A patrzyles jak ci gcc kompiluje takiego switcha ? Moze nie musisz tak kombinowac.
J.
- Vote on answer
- posted
19 years ago
W artykule <4230b906$0$3209$ snipped-for-privacy@mamut2.aster.pl> autorem którego mieni się JS (ale inny ;)), napisano:
int wariant=0;
if( zmienna == wariant++ ) robota(); else if( zmienna == wariant++ ) spoczynek(); ...
Można swobodnie zmieniać kolejność czynności i dodawać nowe, jednak nie wiadomo z góry (bez analizy kodu), jaka wartość "zmienna" odpowiada jakiej czynności.
- Vote on answer
- posted
19 years ago
Ja czesto stosuje #define #define ROBOTA_1 0 #define ROBOTA_2 1 #define ROBOTA_3 2
int ktora_robota = 0;
switch(ktora_robota) { case ROBOTA_1: robota_1(); break; case ROBOTA_2: robota_2(); break; case ROBOTA_3: robota_3(); break; }
ktora_robota++;
W razie przerobek programu wystarczy zmienic numerki w #define a kolejnosc bezpieczniejsza jest niz w enum
Pozdrawiam Tomek
- Vote on answer
- posted
19 years ago
JS <_do_not_use snipped-for-privacy@polbox.com wrote: [...]
typedef void(*procptr)();
void proc1() { }
void proc2() { }
void proc3() { }
int main() { procptr procedures[]={proc1,0,proc2,proc3};
int index; index=0; for(;;) { if(index>=(sizeof(procedures)/sizeof(procptr))) index=0; if(procedures[index]!=0) procedures[index](); index++; } return 0; }
Napisane na kolanie w minute, ale dziala. Nie musisz nic definiowac, kolejnosc jaka sobie zamarzysz.
pzdr. j.
- Vote on answer
- posted
19 years ago
Sprytne i fajne. A jak wyglada takie cos po kompilacji? Nie zajmuje zbyt wiele pamieci? Pozdrawiam Tomek
- Vote on answer
- posted
19 years ago
Rzeklbym raczej ze jeden z bardziej popularnych "trikow na kazda okazje" z zestawu standardowego kazdego nieco bardziej doswiadczonego programisty w C :)
Po kompilacji z -O3 caly main zajmuje ok. 80B. Ale powinno dac sie urwac kilka bajtow. Np. zamiana typu index na unsigned char i zastapienie inkrementacji index preinkrementacja w pierwszym ifie zmniejsza wielkosc kodu o 10B. Wyrzucenie drugiego ifa zmniejsza kod o kolejne 4B. Po kompilacji dla atmega8535 main zmalal do 60B.
pzdr. j.
- Vote on answer
- posted
19 years ago
- Vote on answer
- posted
19 years ago
To mam dla Ciebie jeszcze jedna rade: nie rob awantur ludziom, ktorzy na projektowaniu programow znaja sie lepiej niz Ty.
pzdr. j.
- Vote on answer
- posted
19 years ago
- Vote on answer
- posted
19 years ago
[...]