2017-02-18 1 views
0

Ich bin neu im Präprozessor, ich benutze es selten, also könnte diese Frage albern erscheinen. In meinem C Programm entdeckte ich, dass eine for-Schleife, die einen festen Anfang und ein Ende hatte, das zur Kompilierungszeit bekannt war, einige Leistungsprobleme verursachte. Ich habe das vorläufig gelöst, indem ich es manuell ausgerollt habe, aber das scheint ein bisschen dreckig zu sein. Gibt es eine Möglichkeit, den Präprozessor zu anweisen, dies zu machen:C Präprozessor for-Schleife

for(int i = 0; i < 8; i++) 
{ 
    doSomeThingWithI(i, [...]); 
    doSomeMoreStuffWithIt(i, [...]); 
    foo(); 
    [...] 
} 

in dieser:

doSomeThingWithI(0, [...]); 
doSomeMoreStuffWithIt(0, [...]); 
foo(); 
[...] 

doSomeThingWithI(1, [...]); 
doSomeMoreStuffWithIt(1, [...]); 
foo(); 
[...] 

[...] 

Das Wichtigste ist, dass ich „i“ in der Schleife verwenden.

+2

Mögliche Duplikate von [Schreiben einer While-Schleife im C-Präprozessor] (http://stackoverflow.com/questions/319328/writing-a-while-loop-in-the-c-preprocessor) – prazuber

+3

Ich bezweifle die Schleife ist dein Problem ... –

+1

Ich habe diesen Kommentar erwartet. Die Schleife enthält nur wenige Anweisungen, wird jedoch pro Pixel in einem Racycaster ausgeführt. Der Unterschied zwischen der nicht-ausgerollten und der ausgerollten for-Schleife in Bezug auf die Leistung gemessen in fps beträgt etwa 10,8%. – Addi

Antwort

2

Man kann immer hart Code es so (ersetzen printf mit Funktionen):

#include <stdio.h> 

#define LOOP_8(X) X X X X X X X X 

int main() { 
    int i = 0; 
    LOOP_8(printf("Loop number %d\n", i++);) 
} 

Aber das ist wahrscheinlich viel zu hässlich in echtem Code zu verwenden.

+0

Denken Sie über Code-Blot –

+2

Ich mag die Nerdigkeit davon. – nicomp

+0

darüber nachgedacht, aber ich muss immer noch deklarieren und eins pro Zyklus hinzufügen. – Addi