我倾向于交替使用“定义”、“声明”和“分配”这三个词,但这似乎会冒犯某些人。这合理吗?我应该只在第一次分配给变量时使用“声明”一词吗?或者还有比这更多的事情吗?

有帮助吗?

解决方案

定义并声明是类似的,但分配是非常不同的。

下面我声明(或限定)的变量:

int x;

下面我将值分配给该变量:

x = 0;

在这里,我在一条语句做既:

int x = 0;

注意

不是所有的语言都支持的声明和赋值在一个语句:

<强> T-SQL

declare x int;
set x = 0;

一些语言需要你指定一个值在声明一个变量。此要求允许编译器或语言的解释器来推断变量类型:

<强>的Python

x = 0

其他提示

一个定义是其中所描述的值或功能,即,编译器或程序员被告知正是它是,e.g。

int foo()
{
  return 1;
}

int var; // or, e.g. int var = 5; but this is clearer.

一个声明告诉编译器,或程序员该函数或变量存在。 e.g。

int foo();
extern int var;

赋值是当一个变量的值都设置,通常与=运算符。 e.g。

a = b;
a = foo();

这是使用正确的术语重要的,否则人们就不会知道你在说什么,或者错误地认为你不知道你在说什么。

这些术语在各种语言的标准中通常具有精确的含义。在这种情况下,不应将它们混为一谈。

以c为例:

  • 一个函数可能是 定义的 仅一次(当你说出它的作用时),但也可能是 宣布 在此之前(当你说出它需要什么参数以及它返回什么类型时)。

  • 同样一个变量是 宣布 当你说出它是什么类型时,每个作用域只发生一次。但你可能 分配 重复一个值。(有些语言还区分 初始化 (在声明时给变量赋值)和 任务 (稍后更改该值)。)

的差异似乎微妙,但它们是非常重要的。不是每一个语言使得同样的区分,但在C ++中的变量声明使得编译器知道的变量的类型和名称

int i;

一个的变量定义分配存储,并指定为变量的初始值。

i = 1;

您可以在变量声明和定义合并为一个语句,通常完成。

int x = 1;

声明一个函数内的变量也将拨出存储为变量,所以下面的代码可变a隐式地定义作为其声明的一部分。

int main()
{
    int a;
    return 0;
}

由于可变a是由编译器自动定义的,它将包含任何值是在已分配给它的存储位置。这就是为什么它是不是安全使用自动变量,直到你明确分配已知值给他们。

这是分配发生地更改程序中的一个变量的值的任何时间。

x = 2;
x++;
x += 4;

一个的函数声明下,类似于变量声明,使得编译器知道的函数签名。这可以让你调用一个函数在你的源代码之前,而不会导致编译器错误定义。

int doSomething(float x);

一个的函数定义指定返回类型,名称,参数列表,和说明的功能。这些元素的前三个必须在函数声明相匹配。的函数必须只在一个给定的程序定义一次。

int doSomething(float x)
{
    if( x < 0 )
    {
        x = -x;
    }
    return static_cast<int>(x);
}

您可以将功能decalartion和定义合并成一个,但你必须这样做之前,该功能在你的程序的任何地方调用。

一般角色:定义=声明+保留空间。

定义、声明、赋值有两种情况:

  1. 对于变量。
  2. 对于函数。

为了 变量:

-- 定义:
告诉编译器为变量保留内存。

int x;

-- 宣言:
告诉编译器该变量在其他地方定义。

extern int x;

-- 任务:
告诉编译器将值放入变量中。

x = 0;

为了 功能:

-- 定义:

int functionDef(int x){
  int x;  
  ...  
  ...  
  ...  
  return x;  
}

-- 宣言:这只是函数的原型。

int functionDef(int x);

在正确的答案取决于你在谈论的语言。计算机语言往往有特定的术语,或者是因为语言规范或周围的语言成长起来的社区。 COBOL,回来时,我用它,有很多不同的术语超过主流语言(在接近的语言发展,而不是主流商务的主流语言的意义上)。所述开发了一些奇怪的术语。

如果你懂英语,你通常可以得到一个不错的主意,以什么词从它的正常含义是指,但它从来没有指望太多。同样是用不同的语言或语言的社区特定词语真。

这可能取决于语言,正如人们所说的。我认为这真的取决于是否被用于诸如类的话。对于大多数这里讨论的数据类型,问题可能不会有太大的相关性。在C ++(见 C ++ - 是什么之间的区别定义和声明?),一类或结构总是有一个精确的定义,但可以声明零次或多次。一个类不能没有一个定义上声明。因此,“声明”可能与“拿来主义”的代名词。

在大多数语言,简单的类型,如整数不需要的类做的方式定义

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top