2017-02-18 8 views
0

Я новичок в препроцессоре, я редко использую его, поэтому этот вопрос может показаться глупым. В моей программе C я обнаружил, что цикл for, который имел фиксированный старт и конец, известные во время компиляции, вызывал некоторые проблемы с производительностью. Я временно решил это, вручную выкатывая его, однако это кажется немного грязным. Есть ли способ сказать препроцессор, чтобы превратить это:C препроцессор for-loop

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

в этом:

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

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

[...] 

Важно то, что я должен использовать «я» внутри цикла.

+2

Возможный дубликат [Написание цикла while в препроцессоре C] (http://stackoverflow.com/questions/319328/writing-a-while-loop-in-the-c-preprocessor) – prazuber

+3

Я сомневаюсь, что цикл это ваша проблема ... –

+1

Я ожидал этого комментария. Цикл содержит только несколько инструкций, однако выполняется на пиксель в raycaster. Разница между не-прокатанным и откатанным циклом с точки зрения производительности, измеренной в fps, составляет около 10,8% – Addi

ответ

2

Вы всегда можете жестко закодировать это так (замените printf со своими функциями):

#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++);) 
} 

Но это, вероятно, слишком уродливым, чтобы использовать в реальном коде.

+0

Подумайте о блочном блоке –

+2

Мне нравится его беззаботность. – nicomp

+0

подумал об этом, но мне еще нужно объявить i и добавить один за цикл. – Addi

Смежные вопросы