为了账号安全,请及时绑定邮箱和手机立即绑定

为什么1.c不能调用2.c中国的enter呢?

为什么1.c不能调用2.c中国的enter呢?

C
蝴蝶不菲 2022-11-21 16:12:52
我在1.c文件中写了#include<stdio.h>extern void enter(char str[ ]);main(){char str[30];enter(str);printf("%s",str);}在2.c中写了void enter(char str[ ]){gets(str);} 
查看完整描述

3 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

1、外部函数extern时声明这个函数为外部函数,本文件不做定义,只调用,编译不会出错,但不能运行(没有函数实体)。如果想有运行结果就必须将函数实体包含进来,所以文件包含和extern是配合使用的。文件包含只需要包含.h就是实体的头文件,但有些软件貌似不能识别头文件和c的关系,所以就只能包含.c文件。
2、也就是说外部函数extern只是个声明,他告诉编译器我用到了一个外部函数,但如果该文件没有将函数实体包含进来,编译器是找不到的,依然是不能运行的,所以extern只是个声明,并没有做任何事,只是这样是没用的。include是包含一个文件,就是类似于该文件复制到此处(只是说类似,其实是个查找路径,让编译器去该路径查找函数)。

查看完整回答
反对 回复 2022-11-24
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

1中是可以调用2的,但是在链接的时候要把2生成的.o文件加进去
生成可执行文件有几步,你需要取了解一下编译和链接的过程,不需要太深入,但是会对你很有帮助。最好不要用现成的IDE去做练习,现实的环境中很多都是使用MAKEFILE去组织编译的,这也有助于更加全面的了解整个系统

查看完整回答
反对 回复 2022-11-24
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

还需要2.h 函数声明void enter(char str[ ]);
1.c 中#include “2.h”

查看完整回答
反对 回复 2022-11-24
  • 3 回答
  • 0 关注
  • 78 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信