12

私は最近Cを学んでいて、教科書の 1 つで拡張子が「.r」のファイルへの参照を見つけました。ご想像のとおり、「r」または「ファイル拡張子 r」をグーグルで検索しても生産的ではないので、助けていただけないでしょうか。

次のコードブロックに表示されます

#include "new.r"

static const struct Class _String = {
  sizeof(struct String),
  String_ctor, String_dtor,
  String_clone, String_differ
};

const void * String = & _String;

著者は、それが「プライベート ヘッダー」であると述べていますが、それが正確に何であるかについて、より明確に説明できればよかったのにと思います。

4

6 に答える 6

12

ファイル拡張子 ".r" は実際にはあまり意味がありません。おそらく、その作成者が使用している個人的な慣習にすぎません。プライベート ヘッダーに「new_p.h」などの名前を付ける人もいます。

基本的に、プライベート ヘッダーは、コンシューマではなく、その特定の実装ファイルにのみ含まれることを意図した単なるヘッダーです。言語やコンパイラとは関係ありません。単なるコーディング規約です。

于 2009-06-06T00:41:43.040 に答える
8

私が.rファイルに遭遇した例は、 ANSI-C を使用したオブジェクト指向プログラミングにあり、.rファイルはクラスの「表現」として使用されます-(私が正しく理解していれば)保持することによって情報隠蔽を実行する方法内部表現と、別のヘッダー ファイル内のクラスの関数へのアクセスを制御します。

クラスの実装のみが.rファイルを参照し、その点で、それはクラスの「プライベート ヘッダー」と見なすことができます。クラスへの外部インターフェイスには、通常の.hヘッダー ファイルが使用されました。

例として、クラスは 3 つのファイルで構成される場合があります。

Circle.h    /* Header file with external interfaces, such as methods. */

Circle.r    /* Representation file for internal use within the class, such as
               structs that define the internal states. */

Circle.c    /* Implementation of the Circle class. */

次に、慣例により、クラスを利用するプログラムは、クラスにアクセスするためのインターフェイスとしてファイルをCircle含めることができます。クラスの実装によって厳密に使用され、他のものでは使用されないため、「プライベートヘッダー」になります。Circle.hCircle.rCircle

ファイル拡張子は基本的に使用される規則であり、r「公式」または常に使用されるものではありません。これは便宜上、またhファイル拡張子を持つ通常のヘッダー ファイルと区別するために使用されます。

于 2009-06-06T02:36:43.823 に答える
5

C コンパイラは、ファイル拡張子に特定の意味を持たないため、.r拡張子の使用は、作成者が慣例によって何かを示す方法にすぎません。この本に詳しくないので、それが何であるかはわかりませんが、コンパイラがファイル名に特定の意味を付けているわけではないのでご安心ください。

于 2009-06-06T00:39:13.060 に答える
3

私が見たさまざまなオープン ソース プロジェクトからわかる限り、プライベート ヘッダーは、特定のコード (1 つまたは複数のファイル) によってのみ使用されることを意図したヘッダーです。たとえば、一部のファイルが互いのシンボル/宣言にアクセスする必要があるが、それらのシンボル/宣言に他のコードからアクセスしてはならない場合などに便利です。または、.c ファイルからプロトタイプを分割するために使用できます。

グローバルまたは通常のヘッダーは、通常、特別な「include」ディレクトリに格納されますが、プライベート ヘッダーは、提供する特定のコードの近くにとどまります。

「ドット r」拡張子については、これまで聞いたことがありません。私が見たプライベート ヘッダーは、他のヘッダーと同様に「dot h」という名前です。

于 2009-06-06T00:46:25.167 に答える
0

他の人が言ったように、重要で.rはありません。プライベート ヘッダーはおそらく、それを使用するファイル以外には含まれないことを意味します。

このコード スニペットは、C で C++ をエミュレートしているように見えます。これは、 "class" のサイズ、コンストラクタ、デストラクタなどを保持するconst" " オブジェクトを作成しています。この構造体は、この C 用 OO ライブラリで使用される共通のクラス情報を保持します。ClassString

于 2009-06-06T00:47:59.627 に答える
0

プライベート ヘッダーでよく目にするイディオムは、次の命名規則を使用することです。

  • module.h - パブリック インターフェイス。クライアント コードに必要な名前、構造、および関数。可能であれば、構造体を定義せずに、その名前を宣言し、インターフェイスで不透明なポインターを使用します。SDK を提供している場合、これは公開されたヘッダーになります。
  • modulep.h - プライベート ヘッダー。モジュール内で使用される宣言と定義 - クライアント コードには、これらを含める必要はありません (含めるべきではありません)。SDK を提供している場合、これは公開されません。
  • module.c - 実装; これは、module.h と modulep.h の両方を使用します。
于 2009-06-06T03:41:23.270 に答える