若都是用.c文件来做的
关键:先分别用 gcc -e 对两个文件进行编译,生成两个.obj文件,然后对两个.o文件进行链接。
我现在在UNIX系统下用C语言编写程序,编写了一些没含main()的.C程序,现在想在另一个程序中调用这个程序中编写的函数,请问该怎样调用?
0.c
void fun1()
{}
1.c
extern void fun1 () ( fun1 resides in another source file)
main()
{
//just call it
fun1();
}
compile them in the same project
方法1
将已定义的涵数申明在一个.h文件里,在要使用的.c中包含.h文件。
方法2
如楼上,在要使用的.c中申明涵数为外部的。
方法3
在要使用的.c中直接包含定义涵数的.c文件。
有两种理解.(1)库函数是C语言的内部函数或自带函数,外部函数即程序员自定函数.
(2)凡加写了extern 的函数是外部函数.
第一种理解好懂:
C语言的内部函数指的是C语言自带的函数,无论是动态链接的或静态链接的. 这些函数通过C语言的头文件定义了.
例如, sin(),cos()等数学函数,在math.h中定义了,输入输出函数 printf(),fgetc()在stdio.h中定义了,时间函数表time(),ctime()等在time.h中定义了.还有许多其他内部函数.编程时,只要用#include <库名.h>写在编程头部,程序中就可调用.
自定义函数,就是用户自己写的函数.
第二种凡加写了extern 的函数是外部函数:
自定义函数可以与程序的main()写在同一个文件中,也可以写在另一个文件中,这时你可能还另写自己的头文件或者写extern....,告诉编译器,main中用到的某某函数是"外部函数".
例如,main()在a.c中,自定义函数my_func()在a2.c中
a.c内容:
#include <stdio.h>
extern float my_func(float a);
main()
{
printf("result=%f\n",my_func(2.0));
}
a2.c 内容:
float my_func(float a)
{
return a;
}
编译:
cl -c a.c [得到a.obj]
cl -c a2.c [得到a2.obj]
cl a.obj a2.obj [链接成a.exe]
运行:
a.exe
得
result=2.000000
extern float my_func() 是外部说明,告诉编译,main()里的my_func是外部函数,要通过链接(.obj)得到.
如果把my_func写在a.c里:
#include <stdio.h>
float my_func(float a){
retun a;
}
main()
{
printf("result=%f\n",my_func(2.0));
}
my_func() 就不是外部函数.
编译:
cl a.c [得a.exe]
运行:
a.exe
得
result=2.000000
文章评论(0条评论)
登录后参与讨论