2ndoubleの配列をndoublecomplexの配列に変換する必要があるC99コードがあります。私はこれを
static void real_to_complex(const double *r, size_t n, double complex *z)
{
size_t i;
for (i=0 ; i<n ; i++)
z[i] = r[2*i] + r[2*i + 1]*I;
}
これはコードのパフォーマンスにとって重要な部分であり、新しいストレージ領域zを作成してコピーの費用を負担する必要はなく、代わりにこれらの関数呼び出しを次のように置き換えたいと思います。
z = (double complex*)r;
これを行い、標準に準拠し続ける方法はありますか?ダブルコンプレックスは、2つのダブルの配列と同じレイアウトであることが保証されていることを理解しています-おそらく、このレイアウトが(実数、虚数)か(虚数、実数)かについてのコンパイラチェックで逃げることができますか?