是“int a;” C和C ++中的声明或定义?

时间:2010-12-18 01:49:58

标签: c++ c syntax declaration

int a;是C中的声明或定义吗? C ++有什么不同吗?

我一直认为这只是宣言,直到今天......

是宣言还是定义?

3 个答案:

答案 0 :(得分:18)

声明描述一个对象,而定义请求创建一个对象。所有定义也是声明,但反之则不然。

int a;的情况下,它取决于它在源代码中的位置:

  • 在一个函数中,int a;是一个定义 - 它请求创建一个具有自动存储持续时间的int变量(当然还有一个声明);
  • 在文件范围内,答案在C和C ++中有所不同。在C中,int a;是一个暂定定义(只要类型和链接是可以接受的,就可以有多个);在C ++中,它是一个带有外部链接的普通定义。
  • structunion说明符中,int a;是成员的声明。

答案 1 :(得分:6)

它在您的计划中出现在哪里?

在大多数情况下,它既是声明又是定义。

OTOH,extern int a;仅为声明。

答案 2 :(得分:0)

考虑:

int a;

这是一个定义和宣言。

考虑以下示例...

int i;
printf("%d", i);

将打印一些垃圾值。这显然意味着它有一个记忆位置。

如果你只是声明一个变量而不是定义它,那就去" extern"关键字。

因此extern int b;只是一个声明而不是定义。

示例:

extern int var;
int main(void)
{
    var = 10;
    return 0;
}

因此上面的程序会抛出一个错误,因为" var"在任何地方都没有定义。