Difference between “defining” and “declaring”
Possible Duplicate:
What is the difference between a definition and a declaration?
我试图彻底理解C语言中的"定义"和"声明"。
我相信这里定义了x,因为外部变量自动初始化为0,并且定义了声明和初始化的内容。那是准确的吗?
根据一个x的定义,在这种情况下是一个定义,但为什么呢?它没有被初始化…
1 2 3 4
| int print_hello()
{
int x;
} |
声明是告诉编译器外面有一个类似这样的变量。
定义是告诉编译器这是一个变量。
一个是指事物的存在,另一个是事物。
在您的示例中,范围是造成差异的原因。声明是在文件范围内进行的,但在块范围内不可能声明任何内容;因此,第二个示例是定义;因为,与int x;没有任何关系。
这使得第一个示例(在文件范围内)声明某些int x;存在。要从声明中转换它,需要指定一个值分配给它,强制分配内存。像这样:int x = 0;。
C和C++在分析构造时是非常敏感的。
- 谢谢,但我理解的太多了:)编辑:那么,它的定义是因为这是唯一的选择??我想我得把这个抢了。
- 抱歉,我点击提交太早了,所以我不得不编辑它来添加处理您实际问题的部分。
- 但他的第一个例子也是一个定义,不是吗?
- 实际上,第一个示例不是定义,它只是声明。要将其转换为定义,需要为其指定一个值。C和C++之间的规则略有不同。这就是为什么强制使用extern关键字要好得多的原因。
- 第一个肯定是一个定义。我想
- 暂定定义不同于常规定义。Edwin非常准确,除了暂定定义不是简单的正向声明,它是一个定义,但是可以有多个定义引用同一对象。小心!
声明在tu中引入一个名称。定义实例化/分配该名称的存储。
1 2
| int x; //definition,also a declaration. Every definition is a declaration.
int main(){} |
"define"并不意味着"initialized"。它意味着创建了一些东西,而不仅仅是引用。
定义分配但不一定初始化内存。这会带来有趣的调试。
- 所以即使一个变量没有被初始化,它也可以被定义?但是我读到了这个定义=声明+初始化,这里是-ubuntuforums.org/showthread.php?t=1501482&page=1
- 来自C-FAQ:"定义-N.1.变量或函数的一种声明,它分配并可选地初始化(变量的情况下)或提供函数体(函数的情况下)。"--c-faq.com/sx1/index.html定义
- 应该读一下…好的,那么答案是肯定的。即使变量尚未初始化,也可以定义它。关键是要为定义分配内存?
- 对于变量,是的,定义分配内存。其他构造还有其他的定义。最常见的是,可以有一个定义,但可以有多个声明。