“定义”和“声明”之间的区别[重复]

Posted

技术标签:

【中文标题】“定义”和“声明”之间的区别[重复]【英文标题】:Difference between "defining" and "declaring" [duplicate] 【发布时间】:2011-05-23 15:18:55 【问题描述】:

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

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

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

int x;
main() 

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

int print_hello()

  int x;

【问题讨论】:

阅读this答案。 【参考方案1】:

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

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

一指事物的存在,二指事物。

在您的示例中,作用域是与众不同的。声明是在文件范围内进行的,但在块范围内是不可能声明任何东西的;因此,第二个例子是一个定义;因为,与int x; 无关。

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

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

【讨论】:

谢谢,但我明白了很多:) 编辑:所以,它的定义是因为那是唯一的选择??我想我只需要解决这个问题。 抱歉,我提交的太早了,所以我不得不编辑它以添加处理您实际问题的部分。 但他的第一个例子也是一个定义,不是吗? 其实第一个例子不是定义,只是声明。要将其转换为定义,您需要为其分配一个值。 C 和 C++ 之间的规则略有不同。这就是强制使用 extern 关键字要好得多的原因。 第一个绝对是一个定义..我认为【参考方案2】:

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

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

【讨论】:

所以即使一个变量没有被初始化,它也可以被定义?但我在这里读到了定义 = 声明 + 初始化 - ubuntuforums.org/showthread.php?t=1501482&page=1 来自 c-faq: "definition - n. 1. 变量或函数的声明,它分配和可选地初始化(在变量的情况下)或提供函数体(在一个函数)。” -- c-faq.com/sx1/index.html#definition 应该读过...好的,所以答案是肯定的。即使一个变量没有被初始化,它也可以被定义。关键是必须为定义分配内存? 对于变量,是的,定义分配内存。还有其他,嗯,其他构造的定义。共同点是可以有一个定义,但可以有多个声明。【参考方案3】:

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

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

【讨论】:

以上是关于“定义”和“声明”之间的区别[重复]的主要内容,如果未能解决你的问题,请参考以下文章

参数和参数之间的区别[重复]

参数和参数之间的区别[重复]

Swift 可选属性声明之间的区别 [重复]

Java中a + = b和a = a + b之间的区别[重复]

let const var 三者之间的区别

导入 module 和导入模块之间的区别 [重复]