“定义”和“声明”之间的区别

时间:2010-12-10 17:37:13

标签: c initialization terminology declaration definition

  

可能重复:
  What is the difference between a definition and a declaration?

我试图彻底理解C中的“定义”和“声明”。

我相信这里定义x,因为外部变量自动初始化为0,并且定义了声明和初始化的内容。那是准确的吗?

int x;
main() {}

根据一个x在这种情况下是一个定义,但为什么?它没有被初始化......

int print_hello()
{
  int x;
}

3 个答案:

答案 0 :(得分:3)

声明告诉编译器,那里有一个看起来像这样的变量。

定义告诉编译器这是一个变量。

一个是指事物的存在,另一个是事物。

在您的示例中,范围是产生差异的原因。声明是在文件范围内进行的,但在块范围内,不能声明任何内容;因此,第二个例子是一个定义;因为,int x;没有任何关系。

这使得第一个示例(在文件范围内)成为存在某些int x;的声明。要从声明中转换它,您需要指定为其分配值,从而强制进行内存分配。像这样:int x = 0;

C和C ++在分析构造时非常敏感。

答案 1 :(得分:1)

“定义”并不意味着“已初始化”。这意味着创建了一些东西,而不是仅仅被引用。

定义分配但不一定初始化内存。这可以带来有趣的调试。

答案 2 :(得分:1)

声明在TU中引入了一个名称。定义实例化/分配该名称的存储。

int x; //definition,also a declaration. Every definition is a declaration.
int main(){}