这两个代码有什么区别?

时间:2014-01-17 09:40:10

标签: c output extern

这是第一个代码

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

输出

5
5

第二个代码是

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

输出中

 5
 5

如果输出相同,代码之间有什么区别...... 如果它们相同,那么extern

的用途是什么

2 个答案:

答案 0 :(得分:1)

extern就像对链接器说你已经在其他文件中定义了变量(即使全局变量可以在同一文件中的其他函数内部进行外部)也不会抛出错误,现在你会发现变量然后链接它。

使用extern你唯一声明没有定义它的变量(没有分配内存)。

在你的第一个声明的第二个程序中

        extern int i;

没有分配内存,但稍后在声明

     int i = 5 ;

为i分配内存。当链接器在printf中搜索i时,如果我没有声明为extern,它会抛出一个错误,因为它的extern链接发生在它找到i的定义时。

答案 1 :(得分:0)

extern表示您声明变量但未定义变量(为其分配内存)。请查看此链接以获得有关extern的详细说明:http://www.geeksforgeeks.org/understanding-extern-keyword-in-c/