2017-02-18 3 views
0

私はプリプロセッサを初めて使っていますが、めったに使用しないので、この質問は愚かに思えるかもしれません。 Cプログラムでは、コンパイル時に固定の開始点と終了点を持つforループがパフォーマンス上の問題を引き起こしていることがわかりました。私は一時的にこれを手動で展開することで一時的に解決しましたが、少し汚れているようです。この中Cプリプロセッサforループ

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

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

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

[...] 

重要なことは、私は「私」ループ内で使用しなければならないということです、これをオンにするプリプロセッサを指示する方法はあります。

+2

[Cプリプロセッサでwhileループを書く]の可能な複製(http://stackoverflow.com/questions/319328/writing-a-while-loop-in-the-c-preprocessor) – prazuber

+3

私はループを疑うあなたの問題です... –

+1

このコメントが期待されています。ループにはほとんどの命令しか含まれていませんが、レイキャスターのピクセルごとに実行されます。パフォーマンスの観点からfpsで測定された非ロールアウトとロールアウトされたforループの違いは約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

はそれについて考えましたが、私はまだ私は宣言し、サイクルごとに1つ追加する必要があります。 – Addi