答えて
最初の3つ(int i、static int j、レジスタint k)は定義です。整数がこの変換単位内にあるためのスペースを示し、このエンティティに対してリンカがすべての参照をiにリンクするようにアドバイスします。これらの定義のうち正確に1つよりも多いか少ない場合、リンカは不平を言うでしょう。
最後にextern int lは、lを導入/指定するだけなので宣言であり、新しいメモリアドレス/スペースは割り当てられません。必要に応じて、各コンパイル単位にextern int lを指定できます。 宣言は、翻訳単位に名前を導入したり、以前の宣言によって導入された名前を再宣言したりします。
厳密に一度...(int n)のように、グローバルスコープで(n個の初期化されていない)変数を2回定義することはかなり合法です。 int i; ' –
C言語では、int i;ファイルスコープ内(関数外)に宣言と仮定義があります。複数の暫定的な定義が可能です。 1つの定義のみが許可されます。 –
私は質問がC.
に用語宣言と定義程度であると仮定し宣言は「何か」のコンパイラの名前とタイプを伝えます。
定義は宣言ですが、さらに宣言されている「何かを」「作成します」。例えば。変数の場合、この変数にはいくつかの記憶領域が導入されます。
最初の3つの例では、実際に変数が作成されています。ストレージクラスauto
、static
、およびregister
はすべて、記憶期間を指定するだけです。対照的に、ストレージクラスextern
は、この変数ががと判明していますが、異なる変換単位に存在する可能性があることをコンパイラーに通知します。
たぶん機能の宣言と定義を比較する例が理解し概念が容易になります。
// function declaration:
int foo(int x);
// (now we know a function foo should be "somewhere", but it doesn't exist yet)
// function definition:
int foo(int x) {
return x+1;
}
- 1. Haskell:データ型の複数宣言
- 2. Swiftの同じデータ型の複数の変数宣言のデフォルトイニシャライザ
- 3. クラス宣言とインスタンス宣言の型キーワード
- 4. メンバー関数の宣言型
- 5. データ型宣言で複数の宣言エラーが発生しました
- 6. テキストエディタのフォントと色の設定T-SQL変数宣言データ型サイズ
- 7. 変数宣言と代入
- 8. 複数の変数を1行で宣言する+角型2と型付き
- 9. varchar型の変数とテーブルの列を宣言し
- 10. Data.Map型宣言
- 11. ダイナミック型宣言
- 12. データ型のJava宣言混乱
- 13. SQLAlchemy宣言型モデルのデータ検証
- 14. 型宣言エラー:[Char]と[[Char]]
- 15. C++変数宣言
- 16. c#変数宣言
- 17. 宣言SQL変数 -
- 18. 命令型ビルドシステムと宣言型ビルドシステム
- 19. 目的C:@property宣言とインスタンス変数の宣言
- 20. 関数型変数宣言 - golang.orgで公式golangのドキュメントページ
- 21. 変数を宣言して変数にデータを保存
- 22. Scalaの共変の型宣言はexlplicitly
- 23. 空の型宣言
- 24. 型宣言pythonエラー
- 25. Haskellの型宣言
- 26. Haskellの型宣言
- 27. 角型モジュール宣言
- 28. Javaインター型宣言
- 29. 宣言できませんKubernetes API型宣言の型式
- 30. 宣言型サービスを参照していない宣言型サービス
最後のものは 'int型の 'L'は、どこか別の場所に定義されていることをコンパイラに指示し、リンカーはそれを見つけるでしょう。 –
*定義*と*宣言*の違いは何ですか? –
@FelixPalmenはい –