2016-06-01 2 views
1

プリプロセッサを使用していくつかの配列を塗りつぶしたいと思う。新しく宣言された配列に対してのみプリプロセッサを使うことができます。しかし、前に宣言して使った配列pを変更する必要があります。時間の最適化は私の目的にとって非常に重要です。プリプロセッサで配列を逆転する

#define Reverse(x) {x[63], x[62], x[61], x[60], x[59], x[58], x[57], x[56], x[55], x[54], x[53], x[52], x[51], x[50], x[49], x[48], x[47], x[46], x[45], x[44], x[43], x[42], x[41], x[40], x[39], x[38], x[37], x[36], x[35], x[34], x[33], x[32], x[31], x[30], x[29], x[28], x[27], x[26], x[25], x[24], x[23], x[22], x[21], x[20], x[19], x[18], x[17], x[16], x[15], x[14], x[13], x[12], x[11], x[10], x[9], x[8], x[7], x[6], x[5], x[4], x[3], x[2], x[1], x[0] } 


    int main() 
    { 
    int p[64] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; 

    int q[64] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; 

    //doThings 

    p= Reverse(q); // line A - Gives error 

    int s[64] = Reverse(q); // line B - Works properly 

    //doThings 
} 

私はこのエラーを得た:

配列型に内蔵

Error 11 error C3079: an initializer-list cannot be used as the right operand of this assignment operator c:\users\ferda\documents\visual studio 2013\projects\consoleapplication3\consoleapplication3\consoleapplication3.cpp 39‌​3 1 ConsoleApplication3

+1

Cで配列に割り当てることはできません!あなたはループまたはmemcpyを使用する必要があります – Garf365

+0

こんにちは私はすでにmemcpyを使用しようとしましたが、それはプリプロセッサでは動作しませんでした。 –

答えて

2

がそれに別の配列を割り当てるか、すでに初期化されているアレイ上の集計の初期化を使用することはできません、あなたはmemcpyのか、forループを使用する必要がありますそれを新しい値で更新します。代わりにstd::arrayを使用すると、コードがコンパイルされます。それはoperator=提供:

operator= (implicitly declared) overwrites every element of the array with the corresponding element of another array (public member function)

http://coliru.stacked-crooked.com/a/8e664210b7f7f73b

私は、これは早くあなたが期待通りに動作するかどうかわからない、gccがMOV命令の多くを生成します:​​を。私は、より少ないキャッシュメモリを必要とするforループを使うほうが速いかもしれないと思います。常にあなたのコードをプロファイルします。

+0

こんにちは、std :: arrayは私の問題を解決しました。どうもありがとうございました –