游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2657|回复: 6

请教一下关于extern关键字的问题

[复制链接]

13

主题

46

帖子

52

积分

注册会员

Rank: 2

积分
52
发表于 2007-1-17 14:10:00 | 显示全部楼层 |阅读模式
在网上看了很多关于extern的介绍,但发觉我是越看越糊涂了.

所以想上来请教一下大家的看法.

根据网上的分析:extern是用于声明变量或函数在其他文件上定义了,是一个全局变量或函数.

我按照这个说法,我写了这样的程序:

//t.h 用于声明a数组

char a[100] ;

//EOF

//test.cpp 源程序

#include <stdio.h>
#include "t.h"

extern char a[];
int main(void)
{

        printf("%d\n", sizeof(a));
          return 0;
}

//EOF
我发觉extern char a[];可有可无,但#include "t.h"必须有,我原本以为既然用了extern char a[];那就告诉了编译器a数组的声明在别的文件里,那它就会到别的文件去找,原来是我想错了.既然这个extern不能这样,那我们用到在别的文件里定义的全局变量直接用#include 那个文件上去不就行了吗? extern关键字的用途是什么呢? 怎么用呢?

13

主题

46

帖子

52

积分

注册会员

Rank: 2

积分
52
 楼主| 发表于 2007-1-17 18:42:00 | 显示全部楼层

Re:请教一下关于extern关键字的问题

To: wjk98550328
char a[100] = {'a','b'};这一行放在.h头文件中是为了调试方面而已.

9

主题

688

帖子

688

积分

高级会员

Rank: 4

积分
688
发表于 2007-1-17 22:39:00 | 显示全部楼层

Re:请教一下关于extern关键字的问题

extern 关键字表示这个变量在程序的其他模块中已经定义了。
用extern修饰的变量只是声明,不是定义,编译器不会为它分配内存空间。


那我们用到在别的文件里定义的全局变量直接用#include 那个文件上去不就行了吗?
——————————————————————————————————————————
这样的话,每个#include了那个文件的代码文件中都会有一个“那个变量”。就是说那个变量被定义了多次,编译器为在不同代码文件中定义的“那个变量”分配了各自的内存空间。

18

主题

971

帖子

982

积分

高级会员

Rank: 4

积分
982
发表于 2007-1-18 08:53:00 | 显示全部楼层

Re: 请教一下关于extern关键字的问题

把全局变量的定义写到h文件里是个错误而不是一种选择…
char str[]={'a','b'};这种定义方式会导致在不同的.c或.cpp文件里生成一样的str变量,并最终可能导致编译错误:符号多重定义…头文件里应该只放变量的声明: extern char[] str ;

4

主题

16

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2007-1-18 09:55:00 | 显示全部楼层

Re:请教一下关于extern关键字的问题

哈哈哈哈,想起我刚学C++的那段美好时光了。。。

13

主题

46

帖子

52

积分

注册会员

Rank: 2

积分
52
 楼主| 发表于 2007-1-18 21:36:00 | 显示全部楼层

Re:请教一下关于extern关键字的问题

我好像有点儿明白了.谢谢各位的帮助.

97

主题

590

帖子

590

积分

高级会员

Rank: 4

积分
590
QQ
发表于 2007-1-19 21:28:00 | 显示全部楼层

Re:请教一下关于extern关键字的问题

X.H
extern char str[100];
extern char str1[];

X.CPP
char str[100]="kid";
char str1[]="sindy";

诸如此类
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 06:58

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表