什么是C语言标准函数库?平常用的哪些函数属于标准函数库?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是C语言标准函数库?平常用的哪些函数属于标准函数库?相关的知识,希望对你有一定的参考价值。
什么是C语言标准函数库?平常用的哪些函数属于标准函数库?
你会发现,有一些头文件(比如stdlib.h,stdio.h)每一个编译器都有,而里面的函数(如printf,malloc)每一个编译器都支持。这些函数组成的集合就是标准函数库。平常用的函数基本都属于标准函数库。ANSI对此是有规定的 参考技术A 楼上说的不是很准确,C语言标准函数库不是跟编程软件相关的。C语言的标准变化了好几次,现在说的标准C语言指的是99年制定的C99标准。其中定义的函数库就是C语言标准函数库。具体有哪些你可以查询《C语言参考手册(C:A Reference Manual,Fifth Edition》。
但事实上,每个C/C++编译器都带有自身的函数库,一般都兼容C标准函数库,但也有个别的有些细节上的出入。所以,一般你只要考察你所用编译器的函数库就行了(通常都可以从帮助中得到)。 参考技术B 要看你是用什么版本的C (如TC\ VC... )
C语言标准函数库就是这些编程软件本身自带的常用的函数库.
常见的如math.h 等等本回答被提问者采纳 参考技术C 想想你自己定义的函数,如过你定义了一些函数,就可以看成你制作了一个函数库,只不过你的函数都在程序上,所以不需要包含头文件,如过把你自己定义的函数做成.h文件,就可以在主程序中直接调用 参考技术D 标准库函数是由C标准委员会制定的,用于简化程序员的工作量, 他跟具体的编译器没有关系, 每个标准编译器都应该包括它们.
C的标准函数有很多,随着你学习的深入你会慢慢了解的
C语言为啥可以重写标准库函数?
就比如printf函数,里面使用了一个输出函数int fputc(int ch,FILE *f),然后就可以直接自己写一个相同名字的int fputc(int ch,FILE *f)函数,只是通过什么形式把数据输出就完全是自己实现的.函数重名了编译器为什么不会报错?
这个问题我还是自己解决一下吧。这是编译器搞得事情。在MDK软件中使用
__attribute__ ( (weak))
语句就能让一个函数变成弱属性,如果有相同的函数名,但是没有加这个属性的话,就会采用这个函数了,而声明为弱属性的函数就不会被调用
首先我们弄清楚一件事,函数声明可以放在任何头文件,实现可以放在任何实现该函数的源文件中,那么就存在一个问题:
编译时,到底优先去使用哪一个,为什么没有把标准库中的函数扩展过来;在windows下标准库被编译成了msvcr120.dll(msvcr100.dll,这里指release版),所以并不是扩展到代码中,而是在调用时动态链接;
而题主在其中自定义文件中实现了该函数,所以编译时找到了该函数的实现,并不会去链接dll(这应该是编译器做的一些工作,确定系统的dll需要加载哪些),所以题主的程序执行时就只有一份fputc了,并不冲突。
题主可以通过快捷键跳转声明就知道了,VS下,点选fputc实现函数按F12跳转到声明,指向的是stdio.h,再按一次跳转到你自己的定义了。Qt的话使用F2。
大概就是这样子了,可追问。追问
那么我们是不是也可以将一些函数编译成.dll的形式,然后就可以将这些函数进行重写,或者说在源码中还要进行特别申明这些函数可以被重写?
追答首先说明一点,这个实际上不应该叫重写。
我们也可以将自己写的函数编译成dll,然后另写一个同样的实现函数。
若你在程序中使用到该函数,编译时就会去寻找实现,而在你的源文件中有一份实现,你觉得编译器还会去寻找另外一份实现吗,而且对于动态库,编译时并不会去寻找实现,而是在如动态链接库.lib文件中知道该函数是动态连接及其内存地址。
如你要写与dll中重名的函数,不需要特别声明,只需像通常写函数一样
没有,只是需要重写一个fputc(),比较好奇。
追答其实我没太明白你说的意思,能不能举具体代码例子
以上是关于什么是C语言标准函数库?平常用的哪些函数属于标准函数库?的主要内容,如果未能解决你的问题,请参考以下文章