2015-11-11 15 views
9

Cファイルを別のCファイルにインクルードするのはベストプラクティスではありません。 Cでモジュラーアプリケーションを作成するにはどうすればいいですか?モジュラーCアプリケーションを作成するための推奨方法は何ですか?

私は、コード実装そのものを含まず、関数呼び出しだけを含むヘッダファイルを含めることをお勧めします。

コンパイラはそれぞれのコードの場所をどのように知っていますか? .hファイルと同じ名前で、.cファイルが自動的に検索されますか?

一般的に言って、Cアプリケーション内でコードを分離するにはどうすればよいですか?

+0

あなたはすべての.cファイルをコンパイルし、対応するオブジェクトファイルを一緒にリンクを非表示にするalows。 – Michael

+0

コンパイラはコードの場所を知る必要はなく、コンパイラは関数(.hファイル)の定義を必要としますが、リンカは知っている必要があります。あなたは彼に言います!たとえば、 'math.h'から特定の関数を使用する場合、コードが' libm.so'ファイルにあることをリンカに伝える必要があります。そのため、コマンドラインパラメータ '-lm'を渡します。 – Nidhoegger

+0

gccコマンドで2つのファイルを「手動で」リンクするにはどうしたらいいですか? (私のメインがdemo.cで、bit.cに必要な機能があるとします) – Bracketz

答えて

7

一般に、完全なcファイルではなく、ヘッダーファイルをインクルードするのがベストプラクティスです。コンパイラは、他のコードがどこにあるかを知る必要はなく、使用する関数のプロトタイプだけを知る必要があります。

他のコードの場所を知る必要があるプロセスの部分は、コンパイラではなくgccのような完全なソリューションに含まれているリンカです。

たとえば、gccでコンパイルする場合、コメントに明記されているように、リンカーの参照を追加できます。コンパイラgccでリンク上の例えば@jovit.royeca

クレジット:

は、あなたがあなたがそれにファイルbit.cの一部の機能を使用しているdemo.c

と呼ばれるプログラムのための主要なファイルがあるとします。あなたは、その後 がする必要があることはbit.cからすべてのグローバル 変数と関数のプロトタイプを含むbit.hと呼ばれるヘッダを作成し、次にそのようにgccの でそれをリンクし、その後#include "bit.h"demo.cにそれを含めると:

gcc -o demo demo.c bit.c

eclipse for c/C++のようないくつかの完全なソリューションは、プロジェクト内のすべてのcファイルが自動的にメインのものにリンクされると想定しています。

4

特定の機能を持つモジュール(.cファイル)を作成することをお勧めします。それをクラスと比較してください。この機能を他のモジュールで使用できるようにするには、モジュールが公開する(使用可能になる)関数、データ型、変数を含むヘッダファイルを作成します。

プログラムを作成するには、モジュールを書き込んだり再利用したりしてメインプログラムから呼び出します(呼び出すには、ヘッダファイル#include)。

IDE内のmakefileまたは "プロジェクト"は、開発環境/コンパイラにどのモジュール/ .cファイルをコンパイルするかを指示し、リンカはそれを実行可能ファイルにリンクします。説明するように、モジュールを使用して

は、あなたが他の.C-ファイルからその実装(複雑さ)、

+0

Paulに感謝します。私はMSメモ帳という非常にシンプルなIDEでCアプリケーションを作成しています;-)。 gccコマンドで2つのファイルを「手動で」リンクするにはどうすればよいですか? – Bracketz

+0

Bracketz、わからない(gccは分からない)が、私たちが知っているように、「何も助けなければ、マニュアルを読んでください!コマンドラインがどのようにこのように見えるかはっきりと伝えられます。 –

+0

@Bracketzこれは可能ではないかもしれませんが、完全なIDEを使いたくない場合は、非常に軽量でオープンでかなり速く、通常どおり使用できるコーディング指向のテキストエディタを使用できます余分な機能。いくつかの推奨事項は、[サブライムテキスト](http://www.sublimetext.com/)、[Atom](http://atom.io/)、または[Notepad ++](https://notepad-plus-plus.org)です。 /)。申し訳ありませんが、誤ってメモ帳を簡単に使用することを前提としていて、既に代替案について知っています。 – Kroltan

関連する問題