扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
file1.c 头文件为file1.h
惠农ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:13518219792(备注:SSL证书合作)期待与您的合作!
file2.c 头文件为file2.h
比如file2.c要调用file1.c里的一个函数
首先file2.c里要包含file1.h头文件(file1.h里有file1.c的函数申明)
然后file2.c文件里要有file1.c里的外部函数申明,用extern关键字申明
然后就可以直接file2.c里面调用file1.c里的函数了
我在单片机里是这样弄的完全没问题,51,avr,pic都可以
当然可以啦。
举个例子吧:两个文件 main.c function.c
我们在function.c 中写一个函数 func();
与此同时,我们需要写一个.h文件来声明这个函数,即function.h
// 以下是function.h 的内容
#ifndef __FUNCTION_H__
#define __FUNCTION_H__
void func();
#endif
// 以下是function.c 的内容
#include "function.h"
void func()
{
// do something
}
这样一来,我们想要在另外一个文件,也就是main.c 中调用这个函数的时候,只需要包含它对应的头文件,就可以直接调用了。
// 以下是main.c 的内容
#include "stdio.h"
#include "function.h"
int main()
{
func();
return 0;
}
调用函数库的话用#include XXX.h或者#include"XXX.h"区别是你库文件放在同一个文件夹还是在IDE的安装目录下面,如果你库文件在你工程文件夹里面用#includeXXX.h,否则用#include "XXX.h"
如果你说自己写库的话是需要两个宏命令,#ifndef _XXX_H #define _XXX_H,然后你函数名用extern表示
如果你说编译的话,你应该说的是编译原理吧,你可以反汇编一下一个编译好的程序,如果该处编译了一个其他函数库的函数,你可以看到程序把参数PUSH到内存后CALL或者LCALL了一个这个函数的地址,这就完成了汇编中调用函数的部分,我记得X86里面CALL的机器码是E8H吧,有兴趣的话可以自己用反汇编看一下
这个CALL的话就是调用函数的功能
C语言可以在程序中调用其他文件中的函数。
在大型的程序软件开发中,为了代码的可读性,或多人同时进行代码开发,可以各写自己的源文件,然后,在编译时,将多个源文件链接到一起,就可以形成最终的目标程序。
各程序中的函数可以是共用的,参考代码如下:
//a.c
#include stdio.h
int funa( int n )
{
printf("n=%d\n", n );
return n*2 ;
}
//main.c
#include stdio.h
extern int funa(int); //声明funa为外部函数
void main()
{
int x=5,y;
y=funa(x);
printf("y=%d\n", y );
}
在linux下,编译方法为:gcc main.c a.c -o test
在windows下,可建立一个工程,将两个文件添加到该工程中,编译,运行即可
C语言不同文件的函数相互调用分配,只要在要调用的源文件中包含要被调用的函数所在的头文件即可,但是需要避免重复包含头文件,需要每次写头文件的时候加上:
#ifndef _XXX_H_
#define _XXX_H_
#endif
另一种方法也可以试试看:
新建 project,然后添加 文件,main 所在程序中 添加函数声明 就可以调用了
main.c
#include stdio.h
extern int add(int a, int b);
int main(void)
{int a = 1, b = 2;printf("%d",add(a,b));}
2.cint add(int a, int b)
{return a + b;}
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流