可能重复:
What is the difference between a definition and a declaration?
我试图彻底理解C中的“定义”和“声明”。
我相信这里定义x
,因为外部变量自动初始化为0,并且定义了声明和初始化的内容。那是准确的吗?
int x;
main() {}
根据一个x
在这种情况下是一个定义,但为什么?它没有被初始化......
int print_hello()
{
int x;
}
答案 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(){}