“定义”和“声明”之间的区别[重复]
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()
【讨论】:
以上是关于“定义”和“声明”之间的区别[重复]的主要内容,如果未能解决你的问题,请参考以下文章