读书人

extern的一个小疑点

发布时间: 2012-02-16 21:30:36 作者: rapoo

extern的一个小问题
写了一段代码
test.c
#include <stdio.h>

int main()
{
extern char filename[]= "file ";
char filename[]= "file ";
printf( "%s\n ",filename);
return 0;
}
以上的代码编译时会error,表明filename重复定义了
但是如果把代码改称下面的:
test.c
#include <stdio.h>

extern char filename[]= "file ";
char filename[]= "file ";
int main()
{
printf( "%s\n ",filename);
return 0;
}
程序可以正常编译和执行
不太明白原因,请大家解释一下
ps:我在debain下gcc编译


[解决办法]
我明白了你的意思了,不过你还是有问题的!
对于你
extern char filename[]= "file ";
char filename[]= "file ";
的代码,我们分析一下
extern char filename[]= "file ";//filename[]已经在其他地方定义过了,因此这里只是引用
//只需要extern char filename[];
char filename[]= "file "; //我不明白你这句是要干吗,我就当理解成你要重新赋值
//那就直接filename[]= "file ";干吗还要重新定义呢
最后象你这样说的方法很不好,
一般我们在.h当中就已经做好1方定义,多方引用的程序编写技巧了,无须再在.c中再去引用,除非是模块静态变量。建议楼主好好在看看关于重复定义和引用的技巧。

读书人网 >C语言

热点推荐