注册 登录
查看: 468|回复: 6

extern 的使用的疑问?

[复制链接]
发表于 2014-1-10 12:20:15 | 显示全部楼层 |阅读模式
一个c工程里只有main.h和main.c两个文件  其中  main.h中有extern int a;               main.c中有int a;    这样的话编译不报错      按照我的理解     extern 是扩展一个变量到的作用范围到其他的c文件中   但是这样写 编译器也不报错  不知道是为什么  希望有高手能解答一下   谢谢!
回复

使用道具 举报

发表于 2014-1-10 13:26:39 | 显示全部楼层
我一直这样写的,一个.c文件,一个.h文件,.c文件用变量,.h扩展变量。。其他文件如果调用就要引入.h文件。。
回复 支持 反对

使用道具 举报

发表于 2014-1-10 15:38:31 | 显示全部楼层
这是C语言的知识,extern是声明外部的变量在本地使用,这个外部我理解的是非连接的两个文档。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-10 17:11:55 | 显示全部楼层
ahuzjh01 发表于 2014-1-10 15:38
这是C语言的知识,extern是声明外部的变量在本地使用,这个外部我理解的是非连接的两个文档。

但是按我的想法   在main.c文件中    包含了 main.h  main.h中又有extern int a;   这个不应该要报错么   
回复 支持 反对

使用道具 举报

发表于 2014-1-10 17:31:30 | 显示全部楼层
网上解释:典型的例子是在各.cpp文件中共享全局变量的问题:我们都知道,全局变量一般在.cpp文件中定义,在头文件中声明为extern  。难道不能在头文件中定义全局变量吗?
答案是肯定的。但是,定义在该头文件中的全局变量,只能被一个.cpp文件包含。就是说,某个.cpp文件包含了这个定义了全局变量的头文件后,其它的.cpp文件就不能再包含该头文件了。如果这样的头文件被多个.cpp文件包含,各.cpp文件编译时没有问题,但是链接时一定出现重复定义的错误。
难道在头文件中定义的全局变量只能被一个.cpp文件使用吗?
答案是否定的。如果你一定要在头文件中定义全局变量并在多个.cpp文件中使用,那么必须:
1. 该头文件只能被唯一一个.cpp文件包含,不能被其它.cpp文件包含
2. 在其它.cpp文件中使用该全局变量时,必须对该全局变量进行extern声明
回复 支持 反对

使用道具 举报

发表于 2014-1-10 17:33:40 | 显示全部楼层
飞鸿印雪 发表于 2014-1-10 17:11
但是按我的想法   在main.c文件中    包含了 main.h  main.h中又有extern int a;   这个不应该要报错么  ...

这是在编译连接过程中编译器需要处理的问题。extern在C和C++中可能还不一样。建议你可以在网上搜索一下“extern 在编译连接中的处理以及使用”
回复 支持 反对

使用道具 举报

发表于 2014-1-10 21:13:24 | 显示全部楼层
飞鸿印雪 发表于 2014-1-10 17:11
但是按我的想法   在main.c文件中    包含了 main.h  main.h中又有extern int a;   这个不应该要报错么  ...

这个是 很常见的 C语言 问题。

extern 用于声明 外部 已经 定义的 函数 或者 变量。

模块化编程,一般 声明 和 宏定义,都是 放在 头文件,然后 头文件 被 包含到 其他 *.c 文件,那么 其他 *.C 文件 就能用。

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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