1

私は今いくつかのコードを実行していますが、restrict キーワードを使用して問題が発生しました。

typedef int* pt;

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

a と b を制限したい場合はどうすればよいですか? 以下のコードは失敗しました:

typedef int* pt;

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

前もって感謝します。

4

3 に答える 3

2

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

于 2010-11-13T23:42:51.930 に答える
1

この同様のSO questionをざっと見て読むと、上記のリンクで受け入れられた回答で示されているように、キーワード「restrict」は C++ コンパイラの予約済みキーワードではないため、コードは次のようになります。__restrictまたは__restricted__、もう一度コンパイラを確認してください。 ..

typedef int* __restrict pt;

int foo(pt a, pt b)
{
 ... /* stuff */
}
于 2010-11-13T23:43:50.400 に答える
0

「制限された整数へ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' の無効な使用」について文句を言いますが、 については文句を言いrestrict int *xませんrestrict pt x

于 2010-11-13T23:40:59.877 に答える