下面示例中的声明和定义有啥区别? [复制]

Posted

技术标签:

【中文标题】下面示例中的声明和定义有啥区别? [复制]【英文标题】:What is the difference between declaration and definition in the example below? [duplicate]下面示例中的声明和定义有什么区别? [复制] 【发布时间】:2014-10-10 13:45:14 【问题描述】:
#include <stdio.h>

int main()

   int a;       
   printf("%d\n",a);

上例中的语句:int a; — 是声明还是定义?如果它是一个声明,printf() 语句应该给出一个错误,但它会打印一个垃圾值。所以我们不能称之为声明。但根据语法,它是一个声明。那么这种情况有什么不同呢?

【问题讨论】:

“如果是声明,printf() 语句应该报错”——你具体说的是什么错误? 请注意,即使 a 仅被声明,未定义,printf() 语句也会编译——声明使变量或函数可供使用。如果仅声明变量而未定义变量,则代码将不会链接(因此不会运行),直到代码被修改以包含已声明变量的定义。例如,int main(void) extern int a; printf("%d\n", a); return 0; int a = 57; 显示声明和后续定义。 与你的问题无关,但你应该在之前使用return 0,否则你可能会遇到警告 【参考方案1】:

这是一个声明,这是无可避免的。 C 语言中的每个定义同时也是一个声明。反过来:有些声明是定义,有些不是。

您的代码中的int a; 是一个声明,恰好也是一个定义。

【讨论】:

【参考方案2】:

当您在 c 中声明一个局部变量时,会在堆栈上为该变量创建空间。当您声明 int a 而不给 a 一个特定值时,它的值将是内存中已在堆栈中为其留出的位置中的任何内容。这很可能是一个垃圾值,这就是为什么在打印a 的值时会看到奇怪的数字。为避免这种情况,请声明 int a = 0 或其他数字。

至于如何声明而不是定义变量,您应该使用 extern 关键字,如另一个答案中所述。

【讨论】:

【参考方案3】:

这是一个定义。

对于 C 中的变量,如果您只想声明它而不是定义它,则必须使用“extern”关键字。好文章可以找到here

【讨论】:

至于“垃圾值”,那是因为你没有初始化它。【参考方案4】:

声明意味着我们只是在创建一个变量或方法。定义意味着我们正在为变量分配一些值并在方法中执行一些功能

【讨论】:

您不会通过声明创建任何内容。您只需告诉编译器稍后将创建一个项目。

以上是关于下面示例中的声明和定义有啥区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Keras 中的损失函数和度量有啥区别? [复制]

在 CSS 中,“.”有啥区别?和“#”声明一组样式时? [复制]

.cpp 文件和 .h 文件有啥区别?

这两种声明数组的方式有啥区别? [复制]

JavaScript - 在 for 循环中使用 let 和 var 关键字声明迭代变量有啥区别? [复制]

声明构造函数私有和 =delete 有啥区别?