質問

私は今いくつかのコードを行っており、制限キーワードを使用していくつかの問題を抱えています。

typedef int* pt;

int foo(pt a, pt b)
{
 ... /* stuff */
}

AとBを制限したい場合はどうなりますか?以下のコードが失敗しました:

typedef int* pt;

int foo(pt restrict a, pt restrict b)
{
 ... /* stuff */
}

前もって感謝します。

役に立ちましたか?

解決

「整数への制限付きポインター」が必要です int * restrict p 「制限された整数へのポインター」ではありません restrict int *p したがって、別のtypedefを作成する必要があります。元のものを「内部に到達」することはできません。

編集:あなたは本当ですが できません typedefの内側に到達すると、修飾子は常に最上位レベルで適用されます。この場合、あなたはあなたが 欲しいです restrict トップレベルで。それは人々が通常遭遇するものの逆です const: typedef char *char_ptr 意味 const char_ptr (また char_ptr const, 、それらは同等です)両方とも、人々が望むものである「定数charへのポインター」ではなく「charへの一定のポインター」を意味します。 (これもSOスレッドを参照してください: constポインターのC ++ typedef解釈 )

この場合、私は思う typedef int *pt それを意味します restrict pt 意味 int * restrict pt. 。 GCCは「「制限」の無効な使用」について不平を言うので、検証するのは非常に簡単です restrict int *x しかし、ではありません restrict pt x.

他のヒント

コンパイラ用のC99フラグを使用してコンパイルしていることを確認してください。 restrict キーワードはC89 Cには存在しません。

簡単に見て、これを読んでいます だから質問, 、コードは、上記のリンクで受け入れられている回答で示されるように、キーワード「制限」がC ++コンパイラのキーワードを予約していないためです。 __restrict また __restricted__, もう一度、コンパイラをチェックしてください...

typedef int* __restrict pt;

int foo(pt a, pt b)
{
 ... /* stuff */
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top