【问题标题】: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,否则你可能会遇到警告

标签: c declaration definition


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      这是一个定义。

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

      【讨论】:

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

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

      【讨论】:

      • 您不会通过声明创建任何内容。您只需告诉编译器稍后将创建一个项目。
      猜你喜欢
      • 2010-11-27
      • 2015-07-09
      • 1970-01-01
      • 2012-07-15
      相关资源
      最近更新 更多