4

すべてのエンティティを独自のファイルに分割するプログラムを編成しました。これはこのようなものです。

main.c

#include "student.h"
#include "subject.h"
#include "classroom.h"

#define PI 3.14
int sum(int a, int b);

生徒.h

typedef struct st student;

学生.c

#include "student.h"

件名.h

typedef struct sb subject;

subject.c

#include "subject.h"

教室.h

typedef struct cr classroom;

教室.c

#include "classroom.h"

私の問題は、教室内でStudentsubjectが必要なことです。これをどのように含める必要がありますか?これをclassroom.hまたはclassroom.c内に含める必要がありますか?

#include "student.h"
#include "subject.h"

次に、main.cにsum()PIなどのすべてで使用されるものがあります。

ヘッダーに実装を含めるか、実装ファイルにヘッダーを含めるのはどのように正しい方法ですか? ヘッダーまたは実装ファイルを含める必要がありますか?

すべてを単一のファイルに投げると、問題なくコンパイルされますが、これを正しく行っていないとコンパイルされません。

4

4 に答える 4

4

初め。.h (ヘッダー) ファイルについて知っておくべき重要なことの 1 つ。次のものが必要です。

// In the top of the file
#ifndef NAME_OF_FILE_H
#define NAME_OF_FILE_H

// Your header code goes here

// In the end of the file
#endif

なぜこれを置くのですか?ヘッダー ファイル (たとえばheader.h ) を他の複数のファイル ( file1.cfile2.c ) に含める場合、基本的にコードを繰り返すことになります。つまり、コンパイル時にheader.hのコードが両方のファイルに配置されます。処理する。

これらのプリプロセッサ命令を使用すると、header.hのコードがプログラム内に 1 回だけ存在することが保証されます。

今。#include をどこに配置しますか? そうですね、student.hとsubject.hファイルは、student.csubject.cファイルに実装されているものを宣言すると思います。したがって、classroom.hファイルが前の 2 つのヘッダーで宣言されたものを使用する場合は、 classroom.h#include "student.h"にand#include "subject.h"を配置する必要があります。

Classroom.cだけがヘッダーで宣言されたものも使用する場合は、インクルードをここにのみ配置し、classroom.hには配置しません。

最後に、両方のファイルがヘッダーで宣言されたものを使用する場合は、両方のファイルに#include "student.h"とを配置#include "subject.h"します。

基本的に、インクルードは、ヘッダーで定義された (ただし実装されていない) リソースが必要なファイルに配置します。ヘッダーを上記のコードで囲むことにより、基本的に多くのファイルにインクルードを配置でき、コンパイル プロセス中にコードが繰り返されることはありません。

sum()とについてPI。同じこと。上記のコードでヘッダーを作成し、それらが必要な場所に含めます。

于 2013-08-22T23:00:11.730 に答える
2

したがって、「xh」と「xc」(または「x.cpp」) の構成は、かなり標準的な方法です。しかし、そこに収まらないものもあり、「constants.h」または や などの他の名前が必要になる場合がありPIますSpeedOfLight

sum「utils.h」にうまく収まるようなもの-「utils.c」を持つ価値があるかどうか

.c ファイルには、必要なすべてのヘッダー ファイルが含まれている必要があります (ただし、それ以上は含まれません)。

例えば:

#ifndef X_H__
#define X_H__
 ...  
 all the contents of x.h goes here 
 ... 
#endif

また、ヘッダー ファイルには、必要なものがすべて含まれている必要があります。たとえば、"xh" に "ah" と "bh" が必要な場合、"xh" には#include "a.h"andがあるはずな#include "b.h"ので、覚えておく必要はありません。

「xh」を含める場合は、その前に「ah」と「bh」を付ける必要があります。

同時に、実際に必要な以上のインクルードを追加しないでください...

于 2013-08-22T22:57:19.693 に答える
2

あなたの質問は主にスタイルに関するものです。
せいぜい、人々はあなたに一般的な意見を与えることができます。

各ファイルには、実行する具体的な仕事、または具体的なオブジェクトとそれに関連する操作を定義する必要があると思います。
「仕事」は簡単な方法で説明する必要があります。

  • 汎用 (単純) ルーチンおよび/またはマクロおよび/または定数用のファイル。
  • 文字列ハンドル用のファイル。
  • 整数演算用ファイル。
  • I/O 操作用のファイル。
  • ユーザー インターフェイスおよび/または対話用のファイル。
  • 等々...

さまざまな種類のジョブを分離できるほど、ヘッダーの編成が向上します。

  • 疑問がある場合は、現在のプロジェクトとは性質が異なる他のプログラムに、その機能またはその機能を適用できるかどうかを自問してください。他の一連のプログラムとは関係なく、非常に異なるプログラムで使用する可能性が高いマクロ/関数/データのリストがある場合、前者を同じヘッダー ファイルにグループ化する必要がある可能性が非常に高くなります。

「オブジェクト」は通常、structによって記述され、
具体的でよく理解された「操作」 (つまり、関数) がそのstructに対して明示的に作用する必要があります。

最後に、プロジェクトに必要なすべてのファイルを収集して関連付けるために、1 つまたは 2 つのマスター ファイルを作成できます。

通常、プログラムの残りの部分を管理するオーケストラ ディレクターとして、main.cファイルをできるだけ短くするつもりです。

ドキュメントは、各ファイルに明確で適切なコメントを書くことで
、複数のファイルが分散しているプロジェクトを扱うことができます。

説明する必要があります:

  • ファイルの目的は何ですか。
  • そこに定義されているデータと機能は何か、
  • 関数の使い方、
  • どのような結果が期待できるか、
  • これがこれらの結果の意味です。
  • 等々。

自分のヘッダー ファイルが何をどのように行うべきかを他の人に説明するこの演習を行おうとすると、そこに何か意味がないかどうかがすぐにわかります。

于 2013-08-23T03:50:11.803 に答える