【问题标题】:Declarations, definitions, initializations in C, C++, C#, Java and Python [closed]C、C++、C#、Java 和 Python 中的声明、定义、初始化
【发布时间】:2008-11-21 19:01:04
【问题描述】:

这些术语在上述每种语言中的含义是什么?为什么这些语言在这方面会有所不同(无论它们在哪里,如果有的话)?

【问题讨论】:

  • 对我来说听起来像是家庭作业。否则,你为什么想知道这些差异?
  • @Paul,这可能是某人的作业,但这并不意味着它不应该在这里。我几年前毕业了,这正是我来寻找的。我想知道区别,所以我在电子邮件和对话中使用正确的术语——更不用说我是否在 SO 上发布问题。概念对于编程来说已经足够了,但对于交流来说是不够的。
  • 我的意思是这听起来完全像家庭作业中的问题。这个问题的含义是学生应该做一些研究,而不仅仅是从网站上寻求答案。这并不是说作业分配者没有写出好的问题,只是问题不应该在这里剪切和粘贴。
  • 对我来说听起来像是一个常见问题解答条目。不好意思关了。无论如何,这里有 C/C++ 方面的部分重复 stackoverflow.com/questions/1410563/…
  • @sage 这不是我的作业,有用的线程,因为我正在独立学习 C

标签: initialization language-design declaration definition


【解决方案1】:

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 更加宽松,因为变量在使用前不需要声明。由于绑定是在运行时解析的,因此也不需要函数声明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 2018-05-20
    相关资源
    最近更新 更多