10

上記の各言語での用語の意味は何ですか?この点で、なぜ言語が異なるのですか(どこで行っても)。

4

1 に答える 1

11

C/C++:

宣言とは、「ここに何かの名前とその種類を示しますが、それについてはこれ以上は言いません」という声明です。

定義とは、「これが何かの名前であり、それが正確には何であるか」というステートメントです。関数の場合、これは関数本体になります。グローバル変数の場合、これは変数が存在する翻訳単位になります。

初期は、変数にも初期値が与えられる定義です。一部の言語では、すべての変数が 0、false、null などの既定値に自動的に初期化されます。一部 (C/C++ など) はすべての場合にそうではありません: すべてのグローバル変数はデフォルトで初期化されますが、スタック上のローカル変数とヒープ上で動的に割り当てられた変数はデフォルトで初期化されません - それらには未定義の内容があるため、明示的に初期化する必要があります彼ら。C++ にはデフォルトのコンストラクターもあり、これはまったく別のワームです。

例:


// In global scope:
extern int a_global_variable;  // declaration of a global variable
int a_global_variable;         // definition of a global variable
int a_global_variable = 3;     // definition & initialization of a global variable

int some_function(int param);  // declaration of a function
int some_function(int param)    // definition of a function
{
    return param + 1;
}

struct some_struct;  // declaration of a struct; you can use pointers/references to it, but not concrete instances
struct some_struct   // definition of a struct
{
    int x;
    int y;
};

class some_class;  // declaration of a class (C++ only); works just like struct
class some_class   // definition of a class (C++ only)
{
    int x;
    int y;
};

enum some_enum;  // declaration of an enum; works just like struct & class
enum some_enum   // definition of an enum
{
   VALUE1,
   VALUE2
};

私はあなたが尋ねた他の言語に精通していませんが、宣言と定義をあまり区別していないと思います。C# と Java には、すべてのオブジェクトのデフォルトの初期化があります。明示的に初期化しない場合、すべてが 0、false、または null に初期化されます。変数は使用前に宣言する必要がないため、Python はさらに緩いです。バインディングは実行時に解決されるため、関数の宣言も実際には必要ありません。

于 2008-11-21T19:17:21.920 に答える