2016-04-29 6 views
0

関数の定義が、宣言とともに同じ "some.h"ファイルに書き込まれないのはなぜですか? "some.c"ファイルから "some.h"ファイルを分離しないとどうなりますか?なぜ関数の定義が宣言から分離されていますか?

+0

ヘッダーをすべて含む複数の翻訳単位をリンクしようとすると、複数定義エラーが発生します。 –

+0

これを聞いてくれてありがとう、私はいつもそれについて疑問に思いました。私たちの先生はこれの必要性を説明しませんでした。 @ Kerrekなぜコンパイラが暗黙的にインライン関数を作成しないのですか? –

+0

@ JohannesSchaub-litb:Historical?インライン定義を扱う方が複雑で実装が要求されるので、C89コンパイラからそれを要求する必要はありません。 –

答えて

1

彼が知る必要がある最小限を知るように。 (これにより、コンパイルが高速化され、名前衝突の可能性が低くなり、コード管理が容易になります)Kerrek SBのthis commentで説明したように、ソースとコードを混在させると、大きなプロジェクトをモジュールに分割するのが難しくなります。

たとえば、ライブラリ(定義を含む)をコンパイルして、宣言(ヘッダー)と共にクライアント(インターフェイスのみを気にする人)に渡すと、彼はそれを知る必要なしに使用することができます実装のソース(この方法で、実装の詳細も隠すことができます)

ヘッダなしで、彼はライブラリで利用可能な関数の使い方を知らない。したがって、必須ではありませんが、宣言と定義を分けておくことをお勧めします。実際にはすべてが用法と実装を分離するため、このように考えられていた、これは等の抽象化、再利用性、モジュール性を促進する一方で宣言と定義を分離まあ実際には

+0

これは明確なコードを書くためのものですか?ビューのコンパイラからは分離されているかどうかは関係ありませんか? –

+0

@DavidTsaturyanです。適切に管理されたプロジェクトがより速くコンパイルされます。 –

0

は、必須ではありません

そうでない場合はこれらの規則に従うと、複数の定義などでコンパイルの問題に非常に迅速に直面します。

関連する問題