游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4388|回复: 3

用#include可以包含其他头文件中变量、函数的声明,为什

[复制链接]

10

主题

24

帖子

24

积分

注册会员

Rank: 2

积分
24
发表于 2008-5-16 16:53:00 | 显示全部楼层 |阅读模式
用#include可以包含其他头文件中变量、函数的声明,为什么还要extern关键字,如果我想引用一个全局变量或函数a,我只要直接在源文件中包含#include<xxx.h> (xxx.h包含了a的声明)不就可以了么,为什么还要用extern,而且我怎么觉得c/c++中变量声明和变量定义是一样的,比如int i; 怎么样的例子是单独的声明或定义啊??

4

主题

49

帖子

49

积分

注册会员

Rank: 2

积分
49
发表于 2008-5-16 18:42:00 | 显示全部楼层

Re:用#include可以包含其他头文件中变量、函数的声明,为

楼主可能没有做过多个文件的程序吧.如果只有一个源文件,模块内变量(就是只能在一个文件内有效的变量)就不用加extern了,这个变量可以在整个文件的任何程序中通用.
但如果有多个源文件,想声明一个在所有文件中通用的全局变量(即整个工程中有效的变量)就要在开始用extern声明此变量,然后在某个模块(我理解为一个源文件)中定义后,才能在整个工程中使用它.
如有理解错误,请大家指正,多谢!

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2008-5-29 15:20:00 | 显示全部楼层

Re:用#include可以包含其他头文件中变量、函数的声明,为

回答你后面那个问题:
extern int i;
上面这个是声明;
int i;
上面这个是定义;
extern int i = 1;
上面这个也是定义;
对于一个变量来说,在其作用域内只能定义一次!但可以声明多次.

0

主题

11

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2008-5-30 15:06:00 | 显示全部楼层

Re:用#include可以包含其他头文件中变量、函数的声明,为

我的理解是,在头文件中只能声明变更,而不会真正为这个变更分配相当的存储空间。比如你在一个头文件中声明了一个变量
extern int i;
那么你就可以使用这个变量了,这在编译时告知编译器i是个整型变量,其已经被定义了,可以使用,但并不确定在哪里定义的。当进入链接阶段时,链接器会处理这个变量符号,找到真正定义它的地方并将该符号与它的实际定义位置关联,这很可能是在包含该头文件的.cpp文件生成的lib文件中,也有可能在其它的lib文件中。这样对于变量i全世界就只有一份了,不会出现在多个lib文件中存在多个副本,导致其实际上成了非全局变量。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-22 09:24

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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