首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于extern的一个有关问题

2013-11-26 
关于extern的一个问题我现在有一个工程1.proj,该工程里有三个文件a.h,a.cpp,b.cppa.h里面有一个extern int

关于extern的一个问题
我现在有一个工程1.proj,该工程里有三个文件a.h,a.cpp,b.cpp
a.h里面有一个extern int array[];
a.cpp里会使用数组array[],数组array[]是在b.cpp里定义的。
问题是:如果b.cpp没有包含a.h,编译就过不进去,包含了没问题。我不明白为啥,array声明为extern后,编译器不会自己去寻找数组的定义吗?

还有一个问题,假如我现在还有一个工程2.proj,1和2在一个solution里,如果2里面有一个c.cpp,c.cpp包含了a.h,这时候如果c.cpp调用了数组array,链接过不去。我想问的是,是不是extern不能跨工程啊
[解决办法]
参阅
程序员的自我修养—链接、装载与库
[解决办法]
你的第一个问题我在VS2010中试了,没出错
//a.h
extern int a[];
//a.cpp
#include "a.h"
void fun()
{
a[0] = 1;
}
//b.cpp
int a[] = {1,2,3};
[解决办法]

引用:
Quote: 引用:

好的程序员不应该依赖于系统的实现,让编译器去做多余的事,除非标准上写清楚可以这样用。

不明白你想说什么

我是说,你认为有了extern,编译器就会自己去其他文件下找这个东西,而不用引入头文件是很有问题的。因为标准上从没有说一定可以做到,关键是有的编译器允许,有的不允许。正确的作法是指定查找的文件(include相应的文件),而不是让编译器盲目的全局搜索。

热点排行