use*_*412 6 c terminology initialization declaration definition
可能重复:
定义和声明之间有什么区别?
我试图彻底理解C中的"定义"和"声明".
我相信x这里是定义的,因为外部变量自动初始化为0,并且定义了声明和初始化的内容.那是准确的吗?
int x;
main() {}
Run Code Online (Sandbox Code Playgroud)
根据x这个案例中的一个是定义,但为什么呢?它没有被初始化......
int print_hello()
{
int x;
}
Run Code Online (Sandbox Code Playgroud)
声明是告诉编译器有一个如下所示的变量。
定义就是告诉编译器这是一个变量。
一是指事物的存在,二是事物本身。
在您的示例中,范围才是造成差异的原因。声明是在文件作用域中进行的,但在块作用域中不可能声明任何内容;因此,第二个例子是一个定义;因为,已经没有什么可以做的了int x;。
这使得第一个示例(在文件范围内)成为某些int x;存在的声明。要从声明中隐藏它,您需要指定为其分配一个值,从而强制分配内存。就像这样:int x = 0;
C 和 C++ 在分析结构时对范围非常敏感。