5

これら 2 つの宣言の型は互換性のある型ですか?

void f(char *, char *);
void f(char *restrict, char *restrict);

または同様に:

void g(char *);
void g(char *const);

問題をカバーする標準で何かを見つけるのに苦労しています。私は主に、C のバージョンまたは使用中の他のライブラリのバージョンに応じて、実際の型が restrict 修飾された引数を持つ可能性がある、restrict キーワードを省略して、手動で関数のプロトタイプを作成することが有効かどうかというトピックに関心があります。

4

3 に答える 3

5

それらは互換性があります:

(C99, 6.7.5.3 関数宣言子 (プロトタイプを含む) p15) "[...] (型の互換性と複合型の決定では、関数または配列型で宣言された各パラメーターは、調整された型を持つものと見なされ、それぞれ修飾された型で宣言されたパラメーターは、その宣言された型の修飾されていないバージョンを持つと見なされます。)」

于 2013-08-13T17:50:02.163 に答える
4

C11 セクション 6.7.6.3 §15:

型の互換性と複合型の決定では、関数または配列型で宣言された各パラメーターは調整された型を持つと見なされ、修飾された型で宣言された各パラメーターは宣言された型の非修飾バージョンを持つと見なされます。

于 2013-08-13T17:50:20.413 に答える