外部宣言と外部定義

提供: Appmethod Topics
移動先: 案内検索

宣言構文:インデックス への移動

記憶クラス指定子 auto および register は、外部宣言では使用できません。内部リンケージを持つように宣言されたトランスレーション ユニット内の各識別子に対して、外部定義は 1 つしか指定できません。

外部定義は、オブジェクトや関数も定義する外部宣言です。つまり、記憶域も割り当てます。 外部リンケージを持つように宣言された識別子が、式の中で使用される場合(sizeof オペランドの一部として使用される場合以外)、その識別子の外部定義は、プログラム全体でただ 1 つでなければなりません。

C++ コンパイラでは、配列、構造体、共用体などの外部名を後から宣言して、以前の宣言に情報を追加できます。 以下はその例です:

int a[];              // サイズがない
struct mystruct;      // タグのみ、メンバー宣言子がない
  .
  .
  .
int a[3] = {1, 2, 3}; // サイズを指定して初期化
struct mystruct {
   int i, j;
};                    // メンバー宣言子を追加

次にクラス宣言構文を示します。 クラスに関するセクション(class で始まるセクション)に、クラスの宣言例があります。 「左辺値リファレンス」で、(ポインタ型と密接な関係がある)C++ の参照型について詳細を説明しています。 なお、template 型クラスについては、「テンプレートの使い方」を参照してください。

Appmethod C++ クラス宣言構文(C++ のみ)

class-specifier:                                   
  class-head { <member-list> }                       
class-head:                                          
  class-key <identifier> <base-specifier>          
  class-key class-name <base-specifier>            
member-list:                                        
  member-declaration <member-list>                     
  access-specifier : <member-list>                     
member-declaration:                                     
  <decl-specifiers> <member-declarator-list>;      
  function-definition <;>                          
  qualified-name ;                                
member-declarator-list:                              
  member-declarator                                
  member-declarator-list, member-declarator        
member-declarator:                                 
  declarator <pure-specifier>                 
  <identifier> : constant-expression            
pure-specifier:                                  
  = 0                                     
member-initializer-list:                           
  member-initializer                                  
  member-initializer , member-initializer-list       
member-initializer:                                   
  class-name ( <argument-list> )                     
  identifier ( <argument-list> )                     
operator-function-name:                                 
  operator operator-name                            
base-specifier:
  : base-list
  class-name 
  virtual <access-specifier> class-name
  access-specifier <virtual> class-name
base-list:
  base-specifier
  base-list , base-specifier
access-specifier:
  Private
  Protected
  Public                                                       
conversion-function-name:
   operator conversion-type-name
conversion-type-name:
  type-specifiers <pointer-operator>
constructor-initializer:
  :member-initializer-list
operator-name: one of
  new delete sizeof typeid
  +  -  *  /  %  ^
  &  |  ~  !  =  <>
  +=  -=  =*  /=  %=  ^=
  &=  |=  <<  >>  >>=  <<=
  ==  !=  <=  >=  &&  ||
  ++  __  ,  ->*  ->  ()
  [ ]  .*

関連項目