char *
signed char *
とunsigned char *
(および修飾子孫) はこれを免除されていますか?言い換えればchar *、unsigned char *およびsigned char *のエイリアシングは、任意のエイリアスになります。
、私は他のタイプの別名ポインタパラメータにそれらを期待していない場合は(彼らはそれらを別名可能性があるため)、それはrestrict
char*
に関数の引数を適用することをお勧めします学んだ:
int func(struct foo *f, char * restrict s /*different object*/);
signed charとunsigned charのバリアントのrestrict
キーワードを削除できますか?また
int sfunc(struct foo *f, signed char *s /*different object*/);
int ufunc(struct foo *f, unsigned char *s /*different object*/);
よい 別名互いに同じ種類の符号付きおよび符号なしの変異体へのポインタ?言い換えれば、intへのポインタと符号なしへのポインタを期待して、別のオブジェクトを指す必要がある場合は、とunsigned *
のパラメータはそれぞれrestrict
-qualifiedですか?
/* i and u should be different */
int uifunc(int * /*restrict?*/ i, unsigned * /*restrict?*/ u);
注:プロトタイプの 'restrict'は重要ではありません(ドキュメンテーションとして機能しますが)。関数定義内のバージョンのみが有効です。 –