变量声明和数据类型

时间:2017-08-15 07:50:57

标签: c variables global-variables local-variables variable-declaration

在以下陈述中,前三个是定义,最后一个是声明:

auto int i;

static int j;

register int k;

extern int l;

原因是什么?

2 个答案:

答案 0 :(得分:1)

前三个( int i,static int j,register int k )是一个定义。它表示整数在此转换单元中的空间,并建议链接器将对i的所有引用链接到该实体。如果您有多于或少于这些定义中的一个,链接器会抱怨。

但是在最后 extern int l 中,是一个声明,因为它只是引入/指定l,所以没有分配新的内存地址/空间。您可以根据需要在每个编译单元中包含尽可能多的extern int l。 声明将名称引入翻译单元或重新声明由先前声明引入的名称。

答案 1 :(得分:1)

我假设问题是关于C中的术语声明定义

  • 声明告诉编辑器名称和类型" 某事"。

  • 定义是一个声明,但另外"创建" " 某事"宣布的。例如。对于变量,这会为此变量引入一些存储空间。

在前三个示例中,实际创建了变量。存储类autostaticregister都只指定存储持续时间。相反,存储类extern告诉编译器该变量是已知的,但它可能存在于不同的翻译单元中。

也许比较函数的声明定义的示例将使概念更容易理解:

// function declaration:
int foo(int x);
// (now we know a function foo should be "somewhere", but it doesn't exist yet)

// function definition:
int foo(int x) {
    return x+1;
}