2012-10-08 75 views
0

的变量定义我的理解而言声明和定义如下。宣言和在C

声明:这只是抬起头到的指定“名”“类型”的变量的代码中存在的编译器。因此可以在稍后的时间点定义/分配

定义:这是通过分配合适的内存空间来创建类型实例的过程。

int var; //Declaration and Definition-Agreed!!! 
extern int var; //Declaration only ? 
static int var; //Declaration only ? 

我的心拒绝同意第二个和第三个为声明仅语句。因为在许多文献中我看到,“extern和static变量时自动分配内存初始化为零”。正如你在下面的代码中看到的那样。

#include <stdio.h> 
int main() 
{ 
    static int i; 
    printf("%d\n",i); 
    return 0; 
} 

输出为0.所以在这里看起来像是static int i;是声明,定义和经销商的初始化语句。所以,请添加理由,这

回答

4

具有静态存储期的对象是由零C.

static int a; // initialized by zero 
int b;  // file-scope, static storage duration, initialized by zero 

int main(void) 
{ 
    int c;  // automatic storage duration, indeterminate value 
    static int d; // initialized by zero 
} 

acd初始化的声明和对象的定义。

b是一个声明和一个定义,因为在翻译单元结束之前没有其他文件范围出现b。翻译单元结束前,该声明是一个试探性的定义

0

我希望这个示例清除您的疑问进行的extern:

#include<stdio.h> 
extern int foo; 
int main(){ 
foo=1; 
return 0; 
} 

此代码给你的,因为试图将值分配给尚未分配尚未位置/内存错误。 现在考虑下面的代码:

#include<stdio.h> 
extern int foo = 10; 
int main(){ 
foo=11; 
return 0; 
} 

此代码编译正确地为C表现出某种在它好奇的行为。

+0

欢迎,我希望你有你的答案。 –

1

只是做了实验,得到了澄清。

static int i; //Declaration,Definition and Auto initialized as zero. 
extern int i; //Declaration only. Will throw an error if not externally defined. 
int i; //This when declared outside any code block will be extern by default and initialised to zero