C、C++、C#、Java和Python中的声明、定义和初始化

10

这些语言中这些术语的含义是什么?为什么(如果有的话)这些语言在这方面存在差异?


听起来像是作业。否则,你为什么想知道这些差异呢? - The Archetypal Paul
2
@Paul,这可能是某人的作业,但这并不意味着它不应该在这里。我毕业多年了,这正是我来寻找的东西。我想知道区别,以便在电子邮件和对话中使用正确的术语,更不用说如果我在SO上发布问题。概念对于编程足够,但对于沟通来说则不够。 - sage
我的意思是它听起来就像作业问题一样。问题的含义是学生应该做一些研究,而不仅仅是从网站上寻找答案。这并不是说作业布置者没有写出好问题,只是问题不应该被剪切并粘贴在这里。 - The Archetypal Paul
听起来像是一个常见问题解答条目的制作过程。关闭它真是可惜。无论如何,这里有一个关于C/C++方面的部分重复内容:https://dev59.com/V3M_5IYBdhLWcg3wXx1N#1411005 - RJFalconer
@sage 这不是我的作业,这个帖子对我很有用,因为我正在独立学习C语言。 - laycat
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甚至更加宽松,因为变量在使用前不需要声明。由于绑定是在运行时解析的,所以也没有真正需要函数声明。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接