関数の定義が、宣言とともに同じ "some.h"ファイルに書き込まれないのはなぜですか? "some.c"ファイルから "some.h"ファイルを分離しないとどうなりますか?なぜ関数の定義が宣言から分離されていますか?
答えて
彼が知る必要がある最小限を知るように。 (これにより、コンパイルが高速化され、名前衝突の可能性が低くなり、コード管理が容易になります)Kerrek SBのthis commentで説明したように、ソースとコードを混在させると、大きなプロジェクトをモジュールに分割するのが難しくなります。
たとえば、ライブラリ(定義を含む)をコンパイルして、宣言(ヘッダー)と共にクライアント(インターフェイスのみを気にする人)に渡すと、彼はそれを知る必要なしに使用することができます実装のソース(この方法で、実装の詳細も隠すことができます)
ヘッダなしで、彼はライブラリで利用可能な関数の使い方を知らない。したがって、必須ではありませんが、宣言と定義を分けておくことをお勧めします。実際にはすべてが用法と実装を分離するため、このように考えられていた、これは等の抽象化、再利用性、モジュール性を促進する一方で宣言と定義を分離まあ実際には
これは明確なコードを書くためのものですか?ビューのコンパイラからは分離されているかどうかは関係ありませんか? –
@DavidTsaturyanです。適切に管理されたプロジェクトがより速くコンパイルされます。 –
は、必須ではありません
そうでない場合はこれらの規則に従うと、複数の定義などでコンパイルの問題に非常に迅速に直面します。
- 1. 関数の宣言や定義に[[多分未使用]]を入れますか?
- 2. Pythonファイルを分離する関数を分離してグローバル変数が定義されていません
- 3. この関数はなぜ2回宣言されていますか?コールバック関数はどこで宣言されていますか?
- 4. 関数定義の関数宣言
- 5. クローズコンパイラ:変数定義が宣言されていません
- 6. C++関数プロトタイプが.hファイルのクラス定義で宣言されていますが、.cppで定義されていない関数
- 7. なぜGADBannerViewが宣言されていないのですか?
- 8. なぜ 'EINTR'が宣言されていないのですか?
- 9. 関数定義でテンプレート内にパラメータエラーが宣言されていません
- 10. 入力typedefで宣言されているが、元の関数で宣言されている関数に対して、VS2017が "関数定義が見つかりません"と警告するのはなぜですか?
- 11. C++モジュールを使用する場合、関数宣言(.hppファイル)をその定義(.cppファイル)から分離する何らかの理由がありますか?
- 12. なぜこの変数が宣言されていないのですか?
- 13. 「関数宣言」を「関数宣言」として定義することはできますか?
- 14. 静的関数は宣言されていますが、C++で定義されていません
- 15. C++関数が宣言されていませんか?
- 16. プロトタイプで宣言されている関数が呼び出されないのはなぜですか?
- 17. MatLabはなぜ「定義されていない関数」に不平を言っていますか?
- 18. JavaScript関数 "a"が定義されていないのはなぜですか?
- 19. 関数名が定義されていないのはなぜですか?
- 20. コールバック関数が定義されていないのはなぜですか?
- 21. なぜ関数が定義されていないのですか?javascript
- 22. Javaでクラス定義と宣言のファイルを分離
- 23. コールサイトの前に宣言された関数が見つからないのはなぜですか?
- 24. Sass Error:宣言されていても未定義の変数
- 25. 未定義の変数ですが、変数が定義/宣言されています
- 26. これはなぜコンパイルされますか?他の関数で宣言された関数
- 27. ファンクションが宣言されていても定義されていません
- 28. なぜ私のローカライズされた変数は、定義されていないと言い続けますか?
- 29. なぜこのトランザクションは分離されていませんか?
- 30. 変数を宣言しましたが、定義されていません
ヘッダーをすべて含む複数の翻訳単位をリンクしようとすると、複数定義エラーが発生します。 –
これを聞いてくれてありがとう、私はいつもそれについて疑問に思いました。私たちの先生はこれの必要性を説明しませんでした。 @ Kerrekなぜコンパイラが暗黙的にインライン関数を作成しないのですか? –
@ JohannesSchaub-litb:Historical?インライン定義を扱う方が複雑で実装が要求されるので、C89コンパイラからそれを要求する必要はありません。 –