Bra eller dålig programmering i C?
Postat: 23 apr 2012, 22:06
Håller på att traggla vidare i C här och stöter då och då på frågan om man verkligen bör göra det ena och det andra.
Exempelvis igår, när jag behövde göra en loop som skulle behandla värden i en matris. Problemet var av sådan natur att loopen ska bete sig lite olika beroende på om jag är precis i början av loopen, slutet eller i mitten. Givetvis kan man ha lite villkorssatser i loopen så att rätt sak görs, men jag tänkte att det nog är tidsödande om loopen går många varv (i mitt fall åtminstone några miljoner varv), så jag gjorde tre olika loopar istället som körs direkt efter varandra.
Det kan se ut ungefär så här:
Men så kom jag på något, som kanske är självklart för de flesta, men som ”nybörjare på gamla dar” har man kanske ett handikapp, nämligen att varje ny for-sats sätter i till ett värde som i redan hade, så jag blev lite nyfiken och testade först:
Det visade sig fungera och raderna blev lite kortare, vilket jag uppskattar.
Men trots allt så utförs ändå ett onödigt jobb här, så jag testade att helt utelämna första parametern i for-satsen:
Även detta visade sig funka.
Nu återstår då bara frågan om detta tillvägagångssätt är något man kan rekommendera. Det förutsätter ju att man inte petar in någon sats emellan två av for-satserna som ändrar värdet på i, men den lilla kollen får man ju ha, tycker jag nog.
En annan invändning kan väl vara att vissa kompilatorer kanske inte gillar att en parameter lämnats tom, men huruvida det finns sådana har jag ingen aning om.
Åsikter om detta mottages tacksamt. Är det risk att man blir (ännu mer) idiotförklarad av sådan typ av kod?
Kan i alla fall köpa att det kanske är olämpligt att utelämna ”i=0” i första loopen, särskilt om i inte deklareras omedelbart före loopen.
Exempelvis igår, när jag behövde göra en loop som skulle behandla värden i en matris. Problemet var av sådan natur att loopen ska bete sig lite olika beroende på om jag är precis i början av loopen, slutet eller i mitten. Givetvis kan man ha lite villkorssatser i loopen så att rätt sak görs, men jag tänkte att det nog är tidsödande om loopen går många varv (i mitt fall åtminstone några miljoner varv), så jag gjorde tre olika loopar istället som körs direkt efter varandra.
Det kan se ut ungefär så här:
Kod: Markera allt
int, MyInteger;
MyInteger=3491;
for(i=0; i<MyInteger; i++){
DoSomething(i);
}
for(i=MyInteger; i<MyInteger*1000; i++){
DoSomethingElse(i);
}
for(i=MyInteger*1000; i<MyInteger*1001; i++){
DoSomethingStrange(i);
}
Kod: Markera allt
int i=0, MyInteger=3491;
for(i=i; i<MyInteger; i++){
DoSomething(i);
}
for(i=i; i<MyInteger*1000; i++){
DoSomethingElse(i);
}
for(i=i; i<MyInteger*1001; i++){
DoSomethingStrange(i);
}
Men trots allt så utförs ändå ett onödigt jobb här, så jag testade att helt utelämna första parametern i for-satsen:
Kod: Markera allt
int i=0, MyInteger=3491;
for(; i<MyInteger; i++){
DoSomething(i);
}
for(; i<MyInteger*1000; i++){
DoSomethingElse(i);
}
for(; i<MyInteger*1001; i++){
DoSomethingStrange(i);
}
Nu återstår då bara frågan om detta tillvägagångssätt är något man kan rekommendera. Det förutsätter ju att man inte petar in någon sats emellan två av for-satserna som ändrar värdet på i, men den lilla kollen får man ju ha, tycker jag nog.
En annan invändning kan väl vara att vissa kompilatorer kanske inte gillar att en parameter lämnats tom, men huruvida det finns sådana har jag ingen aning om.
Åsikter om detta mottages tacksamt. Är det risk att man blir (ännu mer) idiotförklarad av sådan typ av kod?
Kan i alla fall köpa att det kanske är olämpligt att utelämna ”i=0” i första loopen, särskilt om i inte deklareras omedelbart före loopen.