質問: 1. 行数のすくないコードはヘッダーに書き、行数が多いコードは宣言だけヘッダーに書き定義をソースファイルに場合と、ヘッダーに関数の宣言と定義を書き、ヘッダーで完結する場合との違いを知りたいです。 2. それとヘッダーに書いた場合インラインになるとあるがインラインはその関数が使われる時に処理が埋め込まる、とそうじゃない非インラインの時の処理とでどういった違いがあるのかが知りたいです。
回答: 関数の実装はソースファイル (ヘッダファイルも含めてソースファイルと呼んでいる場合もありますが、ここではそういう用語は脇に置きます) に書き、外部に対するインターフェイスとして各種の宣言をヘッダファイルに書くのが原則です。 ヘッダファイルにはクラス定義だとか、関数の宣言のみを書くべきです。 ソースファイルひとつがひとつのコンパイル単位であり、すべてのコンパイル単位のコンパイルが完了してからリンクして実行ファイルを作るという手順を理解してください。 あるソースファイルをコンパイルしているときには、コンパイラは他のソースファイルに書かれている関数の中身を知り得ません。 ヘッダファイルを通じて関数の型を知っているだけです。 関数呼出しの替わりに関数を埋め込む (インライン化) ようにしたいとき、別のコンパイル単位にあるものは中味がわからないので埋め込むことが出来ません。 なので、同じコンパイル単位に関数の実装があるようにしなければならず、そのような特別な場合の措置としてインライン化可能関数の定義をヘッダファイルに書くことで解決するわけです。 ただし、現在の高度な言語処理系はリンク時にコンパイラに差し戻して最適化も含めたコンパイルをするようなものもあるので、そういう処理系の場合はプログラマがインライン化に配慮する必要はあまりありません。