PUBLIC void main
これは、Minixソースのkernel.cからのものです。この場合のPUBLICの意味は何ですか?
おそらく次のように定義されています。
#define PUBLIC extern
#define PRIVATE static
おっと、タネンバウムの私のコピーを見てください。これは次のように定義されます。
#define PUBLIC
つまり、何もないとして。それは単に「自己文書化」のほんの少しです。PRIVATEは私が最初に言ったように定義されています。これらはMinixソースファイルにありますconst.h
。
タネンバウムからの引用MinixBookオペレーティングシステムの設計と実装第3版ページ140段落3
PRIVATEは、staticの同義語として定義されています。宣言されているファイルの外部で参照されていないプロシージャとデータは、宣言されているファイルの外部に名前が表示されないように、常にPRIVATEとして宣言されます。原則として、すべての変数とプロシージャは、可能であればローカルスコープで宣言する必要があります。PUBLICはヌル文字列として定義されます。kernel / proc.cの例は、これを明確にするのに役立つ場合があります。宣言
PUBLIC void lock_dequeue(rp)
Cプリプロセッサから次のように出てきます
void lock_dequeue(rp)
static
グローバル変数にはファイルスコープがあります。したがって、グローバル変数を定義するか、関数を静的にすると、それらはそのファイル内でのみ表示されます。つまり、マルチファイル環境では、そのファイル内にあるコード内のファイルにのみアクセスできます。
extern
グローバルはファイルの外部から表示/アクセスできます。関数定義extern
の場合、デフォルトでファイルのスコープ外から表示されるため、オプションです。
これらのことをハッシュ定義することは、実際に何が意図されているかをよりよく解釈して理解するための抽象化レイヤーを追加することにPRIVATE
他なりません。PUBLIC
OOP設計の場合と同様に、プライベートとパブリックには解釈があり、同じ名前を追加すると、それらがどのプロパティを持っているかが示されます。
私はそれがプリプロセッサによってもっとCのようなもの(または空の文字列)に置き換えられると思います。
で検索してみて#define
くださいPUBLIC
PUBLICという単語は、メソッドをコンパイルユニットの「パブリックインターフェイス」の一部としてマークすることを意味します。つまり、現在のソースファイルの外部から呼び出すことができるメソッドです。(これは単なる知識に基づく推測です)。他の人が指摘しているように、PUBLICはほぼ確実に、適切なキーワード/属性のセットに拡張されるプリプロセッサマクロです。