Cにおけるリンク属性および役割ドメイン
760 ワード
同じ識別子がいくつかの異なるソースファイルに表示される場合、同じエンティティを表すか、異なるエンティティを表すか.識別子のリンクプロパティは、異なるファイルに表示される識別子をどのように処理するかを決定します.識別子の役割ドメインは、そのリンクプロパティに関連しています.
リンクプロパティには、external外部、internal内部、noneなしの3つがあります.リンク属性を持たない識別子は、常に個別の個体として扱われ、すなわち、識別子の複数の宣言は、異なるエンティティとして扱われる.Internalリンク属性の識別子は、同じソースファイル内のすべての宣言で同じエンティティを指しますが、異なるソースファイルにある宣言は異なるエンティティに属します.Externalリンク属性の識別子は、何度宣言されても、いくつかのソースファイルに同じエンティティが表示されます.
デフォルトではb c fのリンク属性はexternalであり、残りの識別子のリンク属性はnoneである.別のソースファイルが識別子bの類似宣言を含んで関数cを呼び出す場合、それらは実際にこのソースファイルによって定義されたエンティティにアクセスする.Fのリンク属性がexternalであるのは関数名であるためである.このソースファイルで関数fを呼び出すと、実際には他のソースファイルで定義された関数にリンクされ、この関数の定義が関数ライブラリに表示される可能性があります.
リンクプロパティには、external外部、internal内部、noneなしの3つがあります.リンク属性を持たない識別子は、常に個別の個体として扱われ、すなわち、識別子の複数の宣言は、異なるエンティティとして扱われる.Internalリンク属性の識別子は、同じソースファイル内のすべての宣言で同じエンティティを指しますが、異なるソースファイルにある宣言は異なるエンティティに属します.Externalリンク属性の識別子は、何度宣言されても、いくつかのソースファイルに同じエンティティが表示されます.
typedef char *a;
int b;
int c(int d)
{
int e;
int f(int g);
}
デフォルトではb c fのリンク属性はexternalであり、残りの識別子のリンク属性はnoneである.別のソースファイルが識別子bの類似宣言を含んで関数cを呼び出す場合、それらは実際にこのソースファイルによって定義されたエンティティにアクセスする.Fのリンク属性がexternalであるのは関数名であるためである.このソースファイルで関数fを呼び出すと、実際には他のソースファイルで定義された関数にリンクされ、この関数の定義が関数ライブラリに表示される可能性があります.