4

インターネットで30分間調査した後、関数プロトタイピングの利点についての合理的な議論は見つかりませんでした。

私はJava/Androidで管理しており、Cコースを始めています。プロトタイピングは以前の経験と比べると面倒に見えますが、2013年にまだ存在している理由を知りたいと思います。

リッチーと仲間にとって人生はもっと難しいことを私は理解しています。ただし、現在のコンパイラがヘッダーファイルを使用するので、最初のパスで関数のリストを生成し、次にその関数のリストを使用して通常のことを実行するコンパイラを今日作成することができます。

下位互換性のためだけに、おそらく持続することはできません。表示されているコードに応じて、現在の動作モードと今説明した仮想の新しいモードを切り替えることができるコンパイラを作成することは可能です。

したがって、プロトタイピングが続く場合は、コンパイラープログラマーではなく、プログラマーが関心を持っている必要があります。私は正しいのか間違っているのか-そして、関数プロトタイピングとプロトタイピングなしの利点についての合理的な議論はどこにありますか?

4

2 に答える 2

8

Cでは、ソースがない関数を呼び出すことができることを忘れています。

Cは、コードのバイナリ配布をサポートします。これは、(商用)ライブラリでは非常に一般的です。

API(すべての関数とデータ型)を宣言するヘッダーと、.lib(またはプラットフォームが使用するもの)ファイルのコードを取得します。これは通常、Cのすべての標準ライブラリに当てはまります。ソースをコンパイラベンダーのライブラリに常に取得できるとは限りませんが、もちろん、関数を呼び出すことができる必要があります。

これが機能するためには、Cコンパイラがコードを処理するときに宣言を持っている必要があります。これにより、呼び出しに対して適切な引数を生成でき、もちろん、戻り値を正しく処理できます。

ソースに頼るだけでは十分ではありません。

GRAPHICSAPI_SetColorRGB(1, 1, 1);

しかし、実際の宣言は次のとおりです。

void GRAPHICSAPI_SetColorRGB(double red, double green, double blue);

プロトタイプがない場合、コンパイラはint引数を魔法のように変換することはできません。doubleもちろん、プロトタイプがあると、呼び出しが理にかなっていることをエラーチェックすることができます。これは非常に価値があります。

于 2013-01-22T14:47:27.040 に答える
3

コンパイラーにすべてのソースファイルを最初に調べて、すべての関数プロトタイプに注目させることについての興味深いアイデア。

でも

  • ライブラリ(オブジェクトコード)はどこかに宣言を持っている必要があります。これがインクルードが存在する理由です

grepまた、「フリーテキスト」としてインクルードできると便利だと思います。

grep alloc /usr/includes/*
于 2013-01-22T14:47:45.417 に答える