这些术语在上述每种语言中的含义是什么?为什么这些语言在这方面有所不同(无论它们在哪里,如果有的话)?
Aydya
问问题
5155 次
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 回答