C语言中如何引用其它C源文件中的函数?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中如何引用其它C源文件中的函数?相关的知识,希望对你有一定的参考价值。

如题,比如我建了两个C源文件
A1.C 和 A2.c
我把一个自字义函数写在A2.c里面,然后在A1.c里面调用它

1,A1.c要怎样调用?
2,A2.c里面要怎样写?只写一个自定义函数就可以了吗?

在源文件A1.c中调用A2.c 中的函数有两种方法:

1、在A2.c中有完整的函数定义,在A1.c中添加一下要用到的函数原型(声明)就可以了,例如:

在A2.c中:有函数void A2()...;。

在A1.c中:在文件前头增加一行:void A2();就可以了。

2、把A2.c中完整定义的函数的原型,写到一个A2.h文件中,然后在A1.c的文件头增加#include "A2.h"就可以了。

以上两种方法,在A1.c中都可以正常的调用,就跟在A2.c中调用一样。

其实函数默认是外部的,只要在其他文件中声明就能使用;但是注意如果在前面加上static,就只能在本文件中使用了,不能再被其他的文件调用。

扩展资料: 

1、一个.h文件要 对应有一个.c文件,这样链接器就可以调用这个文件里的函数。比如a.h 和 a.c。

2、把相应的函数定义写在.c文件中。这里要强调一点:要加上#include ".h",这个一般作为一种工程规范。因为如果.c文件中的函数也需要调用同个.c中的其它函数,那么这个.c往往会include对应的.h。比如头文件里进行了变量的声明,这个时候对应的.c文件是一定要加上这个头文件的。

3、再在其他的main.c文件开头添加#include "a.h"。

参考技术A 有两种方法:
1。在A2.c中有完整的函数定义,在A1.c中添加一下要用到的函数原型(声明)就可以了,例如:
在A2.c中:有函数void A2()...;
在A1.c中:在文件前头增加一行:void A2();就可以了
2。把A2.c中完整定义的函数的原型,写到一个A2.h文件中,然后在A1.c的文件头增加#include "A2.h"就可以了
以上两种方法,在A1.c中都可以正常的调用,就跟在A2.c中调用一样。
其实函数默认是外部的,只要在其他文件中声明就能使用; 但是注意如果在前面加上static , 就只能在本文件中使用了, 不能再被其他的文件调用。
参考技术B 有两种方法:

1。在A2.c中有完整的函数定义,在A1.c中添加一下要用到的函数原型就可以了,例如:
在A2.c中:有函数void A2()...;
在A1.c中:在文件前头增加一行:void A2();就可以了

2。把A2.c中完整定义的函数的原型,写到一个A2.h文件中,然后在A1.c的文件头增加#include "A2.h"就可以了

以上两种方法,在A1.c中都可以正常的调用,就跟在A2.c中调用一样。本回答被提问者采纳
参考技术C C语言中引用其它C源文件中的函数有几种方式:
1.需要在 使用此函数的源文件 中 包含被使用函数所在的源文件,并且保证被使用函数所在的源文件在工程的源文件目录中。
比如说要在a.c中使用func()函数,func()函数在func.c中定义,源文件路径为“d:/project/path/”,那么就需要在a.c中加上#include"func.c",并且将func.c拷贝到“d:/project/path/"下。
2.使用extern进行声明,表示函数在其他文件中定义了。
比如说要在a.c中使用func()函数,func()函数在func.c中定义,原型是原型是int func(int mu),在a.c的前面加上extern int func(int mu) ,并且将func.c放在a.c相同的路径下即可。
参考技术D 用#include "A2.c"
应该可以吧

C指针原理(36)-C快速入门

一、C简介?

1、C语言简介

C语言是一门语法?精简的语言,它的关键字仅有32个,C语言以main函数为主函数,程序编译运行后后,执行的就是main函数的内容,因此,纵观很多C语言程序,形成了一道有趣的风景线:头文件和许多c代码文件以main函数为中心和起始点构造,在main函数中调用了这些文件中编写的代码,引用头文件。C语言程序实质就是在程序中调用?C标准库提供的函数、其它C库提供的函数、操作系统提供的API接口、自己定义的函数,同时应用适当的数据结构和算法来完成工作。

C语言虽然精简,但却很强大,它不但能完成比它更复杂的程序语言所做的事情,而且还能做其他语言不擅长的工作,比如操作系统,LINUX、UNIX的内核、gnome桌面等等都是C语言的杰作,尤其在系统内核的设计与研发领域,它的“兄弟”C++也不是对手(至今为止,没有出现一款用C++制作的桌面系统或嵌入式系统的内核)。

2、C语言的关键字

auto?:声明自动变量?  
short?:声明短整型变量或函数?  
int:?声明整型变量或函数
long?:声明长整型变量或函数?  
float:声明浮点型变量或函数?  
double?:声明双精度变量或函数?  
char?:声明字符型变量或函数?  
struct:声明结构体变量或函数?  
union:声明共用数据类型?  
enum?:声明枚举类型?  
typedef:用以给数据类型取别名?  
const?:声明只读变量?  
unsigned:声明无符号类型变量或函数?  
signed:声明有符号类型变量或函数?  
extern:声明变量是在其他文件正声明?  
register:声明寄存器变量?  
static?:声明静态变量?  
volatile:说明变量在程序执行中可被隐含地改变?  
void?:声明函数无返回值或无参数,声明无类型指针?  
if:条件语句?  
else?:条件语句否定分支(与?if?连用)?  
switch?:用于开关语句?  case:开关语句分支?  
for:一种循环语句?  
do?:循环语句的循环体?  
while?:循环语句的循环条件?  
goto:无条件跳转语句?  
continue:结束当前循环,开始下一轮循环?  
break:跳出当前循环?  
default:开关语句中的“其他”分支?  
sizeof:计算数据类型长度?  
return?:子程序返回语句(可以带参数,也可不带参数)循环条件?

猜数字:

我们来一步步打造一个猜数字的游戏

游戏的大意是:输入一个1-500以内的正整数,程序根据玩家输入的数字,提示数字比正确答案之前大,或者数字比正确答案之间小,比如要猜的数字是85,玩家第一次输入90,提示比要猜的数字大,第二次输入80,提示比要猜的数字小,第二次输入85,提示猜中了。

下面来一步步打造这个游戏,帮助大家快速复习C语言基础知识。

(1)编写输入数字的代码,并编译执行。


[email protected]:~/cquick?%?cat?guessnum.c

#include?<stdio.h>

int?main(){

int?mynum;

printf("你好,请输入一个数字:");

????????scanf("%d",&mynum);

printf("
你输入的数字是:%d
",mynum);

}

接着在终端编译执行:

[email protected]:~/cquick?%?gcc?guessnum.c?-o?myguess

[email protected]:~/cquick?%?./myguess

你好,请输入一个数字:55

你输入的数字是:55

[email protected]:~/cquick?%?

纵观上面程序及其执行结果,可发现,C语言中可使用printf函数完成屏幕输出,可使用scanf函数接受指定格式的数据录入,此外,” ”表示换行符,”%d”表示整数格式。

(2)限制输入数字的范围

游戏的要求是1-500以内的整数

但是如果我们在上述程序中输入900、-10等不符合要求的数字,仍然能通过,

你好,请输入一个数字:900

你输入的数字是:900

你好,请输入一个数字:-10

你输入的数字是:-10

系统没有提示错误。因此,需要修改程序限制玩家输入数字的范围


#include?<stdio.h>

int?main(){

????????int?mynum;

????????printf("你好,请输入一个数字:");

????????scanf("%d",&mynum);

????????if?(mynum>500?||mynum<1){

????????????????printf("数字仅限于1-500之间,请重新运行本程序!
");

????????}

????????else{

????????printf("
你输入的数字是:%d
",mynum);

????????}

}?

运行程序:

[email protected]:~/cquick?%?gcc?guessnum.c?-o?myguess

[email protected]:~/cquick?%?./myguess

你好,请输入一个数字:200

你输入的数字是:200

[email protected]:~/cquick?%?./myguess

你好,请输入一个数字:900

数字仅限于1-500之间,请重新运行本程序!

[email protected]:~/cquick?%?

上面程序使用了C语言的if...else...语句块,这是一个很多语言都有的机制(包括一些函数语言,比如haskell的if...then...else....),该语句块分2个部分,第1个部分if语句段,表示如果if后面跟的条件满足的话,执行if语句段,第2个部分是else语句段,如果if后的条件不满足执行,什么是条件满足与不满足,C语言可理解为如果条件的返回值非0表示条件满足,如果是0则表示条件不满足。

可以将多个条件组合成一个综合条件做为该语句块的条件,方式是使用||(表示或者)或&&(表示并且),比如上面程序中的条件:mynum>500?||mynum<1

但是C语言中有一个关键字NULL,在C语言中,条件语句中出现的NULL和0的值是一样的,但NULL常用于指针和对象,0常用于int等整型数。这意味着,如果出现了下面类似的语句块,就意味着是对含有指针变量(指针变量通常用于指向其它变量的内存地址,比如下面代码中的mypoint1和mypoint2)的条件进行判断了:

if?(mypoint1!=NULL){

............

}

if?(mypoint2==NULL){

............

}

从运行效果来看,错误的数字没有被接受,但要想重新输入,必须重新运行一次程序。

(3)引入循环机制

C语言中可以使用while循环,语法格式如下:

while(条件){

语句块

}

或者使用do...while循环,语法格式如下:

do{

语句块

}while?(条件)

通过循环,在玩家输入错误数字的情况下,给玩家重新输入的机会,而不是直接退出程序。

[email protected]:~/cquick?%?cat?guessnum.c

#include?<stdio.h>

int?main(){

int?mynum;

int?ispass=0;

while?(!ispass){

printf("你好,请输入一个数字:");

????????scanf("%d",&mynum);

if?(mynum>500?||mynum<1){

ispass=0;

printf("数字仅限于1-500之间,请重新运行本程序!
");

}

else{

ispass=1;

printf("
你输入的数字是:%d
",mynum);

}

}

}

编译并运行:

[email protected]:~/cquick?%?gcc?guessnum.c?-o?myguess

[email protected]:~/cquick?%?./myguess

你好,请输入一个数字:1234

数字仅限于1-500之间,请重新运行本程序!

你好,请输入一个数字:-12

数字仅限于1-500之间,请重新运行本程序!

你好,请输入一个数字:88

你输入的数字是:88

上述程序中的while的条件中使用了“!”,它表示逻辑非。

上述程序中的while的条件中使用了“!”,它表示逻辑非。

?????也可以用do...while来实现它:

#include?<stdio.h>

int?main(){

????????int?mynum;

????????int?ispass=0;

????????do{

????????printf("你好,请输入一个数字:");

????????scanf("%d",&mynum);

????????if?(mynum>500?||mynum<1){

????????????????ispass=0;

????????????????printf("数字仅限于1-500之间,请重新运行本程序!
");

????????}

????????else{

????????????????ispass=1;

????????????????printf("
你输入的数字是:%d
",mynum);

????????}

????????}?while?(!ispass);

}

[email protected]:~/cquick?%?gcc?guessnum.c?-o?myguess

[email protected]:~/cquick?%?./myguess

你好,请输入一个数字:8889

数字仅限于1-500之间,请重新运行本程序!

你好,请输入一个数字:12

你输入的数字是:12

观察上面2个程序可看出,使用了ispass这个变量做为是否退出循环的依据,也可以不使用ispass,直接通过break语句退出循环(注意,只能退出break语句本身所在的那层循环),

#include?<stdio.h>

int?main(){

????????int?mynum;

????????int?ispass=0;

????????while(1){

????????printf("你好,请输入一个数字:");

????????scanf("%d",&mynum);

????????if?(mynum>500?||mynum<1){

????????????????printf("数字仅限于1-500之间,请重新运行本程序!
");

????????}

????????else{

????????????????printf("
你输入的数字是:%d
",mynum);

????????????????break;

????????}

????????}?

}?

[email protected]:~/cquick?%?gcc?guessnum.c?-o?myguess

[email protected]:~/cquick?%?./myguess

你好,请输入一个数字:8788

数字仅限于1-500之间,请重新运行本程序!

你好,请输入一个数字:66

你输入的数字是:66

[email protected]:~/cquick?%?

以上是关于C语言中如何引用其它C源文件中的函数?的主要内容,如果未能解决你的问题,请参考以下文章

c语言在头文件中如何引用另一个头文件中的函数

c语言一个结构体如何在多个源文件里面调用?

C程序怎样调用其它文件里的函数?

object _c 语言可以在函数中再定义函数吗

单片机 C语言,如何调用外部自定义函数。

C语言中,其他文件可否调用文件中的static函数?