extern相关问题

[复制链接]
 楼主| gxgclg 发表于 2012-4-22 19:19 | 显示全部楼层 |阅读模式
关于extern的几道题目


题目1:为什么变量i编译错,请指出以下解释有什么不妥之处:

对于extern声明的全局变量,声明之后,只会在整个exe中保留一份,

a.cpp包含了a.h,即告诉了 a模块变量i是来自外部模块。 同理:在main模块中,

变量i告诉了main模块,变量i来自外部模块。 对于函数fun也是同样解释。



代码:

a.h

extern
int i;

extern
void fun();

a.cpp


#include
"stdafx.h"
#include
"a.h"
void fun()
{
    i
++;
}

main.cpp



int main()
{
   
extern
void fun();
   
extern
int i;

    i
=2;
    fun();
   
return
0;
}


题目2:

把a.h 中的
extern
int i; 改成:int i, 为什么编译没有错误。请指出原因。

 楼主| gxgclg 发表于 2012-4-22 19:20 | 显示全部楼层
题目3:extern float f;  请问这句代码是否被定义了?

如果代码为:

static float f; 呢,又如何??
无冕之王 发表于 2012-4-22 19:42 | 显示全部楼层
先分清定义和声明
txcy 发表于 2012-4-22 22:14 | 显示全部楼层
代码中i一直没定义,因为extern int i只是告诉编译器在某个地方定义i,并不定义,则编译器会去找i的定义。。。。但却找不到。。。因为你没定义。怎么可能找到。。。。所以编译出错。。。
yybj 发表于 2012-4-22 22:22 | 显示全部楼层
1.extern只是声明,不是定义,必须在工程的其它源文件中定义
2.是因为你只在本文件中使用i,i是普通全局变量
3.用static修饰就是定义了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

177

主题

1653

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

177

主题

1653

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部