多文件编译问题(80分)

sum_1 2002-04-26 09:16:12
/*file 1.c*/
/*..................................*/
#include "string.h"
extern AA text;
strcpy(text.i,"i am a boy");
printf("%s ",text.i);
....
/*..................................*/



/*file 2.c*/
/*..................................*/
typedef struct data
{char i[20];
}AA;
AA text;
/*..................................*/


/*file main.c*/
/*..................................*/

#include "2.c"
#include "1.c"
main()
{


}
/*..................................*/

这段代码是正确的.如果把main.c中的包含文件换一下先编译1.c后编译2.c,那么1.c中extern AA text;为何出错?
按我的观念是extern声明在外部文件的变量没错呀.非要先编译2.c再编译1.c不可吗?
编译器一但遇到extern 时就到外部文件中去找变量定义的语句,这里包不包扩还未编译的外部文件.(这个问题看起来有一点幼稚,但我还是想问个清楚)
...全文
20 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
krerix 2002-04-28
  • 打赏
  • 举报
回复
同意楼上的意见

在2.c开头加上include 1.h就可以在2.c中,写extern AA data;
freezingfire 2002-04-28
  • 打赏
  • 举报
回复
.h不能单独编译吧?2.c如果不include 1.h,extern处写什么也不管用阿?肯定报告没有定义的标识符。
sum_1 2002-04-28
  • 打赏
  • 举报
回复
(最后一个问题知道解答后就结帖)
/*1.h*/
struct AA
{int count;

}data;
/****************************/
/*2.c*/
extern ????

void pint()
{printf("%d ",data.count=100);


}
/****************************/
注意先编译2.c再编译1.h时,extern 处因怎样声明。

sum_1 2002-04-26
  • 打赏
  • 举报
回复
wiler(贼狼)
你说的内部类型是不是指:extern int data;(声明data是外部文件中的一个整型变量).这句对吗???
sum_1 2002-04-26
  • 打赏
  • 举报
回复
wiler(贼狼)
你说的内部类型是不是指:extern int data;(声明data是外部文件中的一个整型变量).
sum_1 2002-04-26
  • 打赏
  • 举报
回复
wiler(贼狼)
你说的内部类型是不是指:extern int data;(声明data是外部文件中的一个整型变量).
wiler 2002-04-26
  • 打赏
  • 举报
回复
原因是:
extern 只让编译器知道这个变量在别的文件中
但如果不是内部的类型,编译器就不知道自定义的类型的具体组成结构.
所以,你可以这样做
把"typedef ..."放在.h中,让1.c和2.c都包含它.
shanyourouqing 2002-04-26
  • 打赏
  • 举报
回复
同意楼上的说法
garfield_82 2002-04-26
  • 打赏
  • 举报
回复
你试试在1.c中加入#include"2.c"

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧