私は従来のプロジェクトの1つにrestrict
というキーワードを多用しています。
私はrestrict
の根拠を理解していますが、これらの機能の一部に適用した場合、その有用性に疑問を呈します。一意のポインタ型のパラメータでrestrictキーワードが意味をなさないのですか?
は、次の2つの例を取る:
void funcA(int *restrict i){
// ...
}
void funcB(int *restrict i, float *restrict f){
// ...
}
int main(){
int i = 1;
float f = 3.14;
funcA(&i);
funcB(&i,&f);
}
は、1つのrestrict
でfuncA
とfuncB
のパラメータにタグを付ける可能性がある任意の有効な理由はありますか?
funcA
には1つのパラメータしかかかりません。どのように他のものと同じアドレスを持つことができますか?
funcB
は、異なるタイプのパラメータをとります。それらが同じアドレスであった場合、それは既に厳密なエイリアシングルールを破っていませんか?
関数がグローバルポインタ/オブジェクトを使用する場合、 'restrict'は値を持つと思います。 – chux
異なるタイプへのポインタに関して、Cは 'char * fgets(char * restrict s、int n、 FILE *ストリームを制限する); 'を指定したため、異なるタイプの' restrict'を持つ値を標準委員会が見ているようです。 – chux
興味深い。 char *は他の型を指すことが許されているので、charは例外ではありません。 –