有关C语言的内部函数和外部函数的定义说明

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有关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
参考技术A include "....h"这样是首先找你自己定义的。
如果自己没有定义就找库的。
include <....h>这样是一定找库的。
也就说,你反正使用“...h"是不会错的。
上面一个是将头文件名字<>起来,一个
""起来
参考技术B 长见识 参考技术C 不是在开始的时候有一个外部文件引用吗
#includ
可以引用其他的c程序
参考技术D 哦,我恨C语言,月考,我创造了学校历史新低

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

参考技术A 不能,C语言中的static函数,内部函数和外部函数,函数一旦定义后就可被其它函数调用。
当一个源程序由多个源文件组成时,在一个源文件中定义的函数能否被其它源文件中的函数调用,C语言又把函数分为两类。
如果在一个源文件中定义的函数只能被本文件中的函数调用,而不能被同一源程序其它文件中的函数调用,

这种函数称为内部函数。
内部函数也称为静态函数,但此处静态static
的含义已不是指存储方式,而是指对函数的调用范围只局限于本文件。
外部函数在整个源程序中都有效,其定义的一般形式为extern

类型说明符

函数名形参表。
C语言中static函数,只能被本文件中的函数所使用,别的c文件中不能访问这个函数,而且你可以在别的文件中定义与之同名的函数,不会互相干扰。

以上是关于有关C语言的内部函数和外部函数的定义说明的主要内容,如果未能解决你的问题,请参考以下文章

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

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

C语言函数定义和说明的格式

C语言外部函数与内部函数

C语言中如何把结构体变量定义在主函数内,再调用一个自定义输入函数和输出函数

C语言——变量类型