c语言 使用头文件中声明的函数吗,C 语言为什么只需要 include<stdio.h> 就能使用里面声明的函数?...

你的猜想是对的,c标准库是默认连接的,“C运行库”是已经编译好的目标文件,不需要源码了。再补充一个说明,c标准库有不同的实现,比如GNU c library(glic)、newlib、微软的msvc、BSD libc等。c runtime library(C运行时库)是另外一个事物,main函数是被它调用,注意不要和c标准库混淆。

一下引用另一个相关回答。1、include干了什么

#include这个预处理命令是把文件原封不动地复制到本文件中来,#include 就是复制stdio.h文件,加上一对尖括号,意思是stdio.h文件从系统目录中找。那么“系统目录”指的是哪里,这个就是编译器的约定,可以不用操心它在哪里,反正编译器能找到就行。

2、为啥要include

c语言有个这样的约定:函数要先声明再调用。我们经常调用的printf函数,就是stdio.h文件里声明的,有了#include ,就不需要在c文件再次声明printf函数(以及很多其他函数)。如果程序不需要调用这些函数,那就不必include。怎么知道stdio.h还有哪些函数声明?stdio.h是c标准库的一部分,c标准库被分拆成多个部分,具体需要查阅c标准库规范。

3、我们并没写printf函数的定义,是谁实现的?

像printf这样的函数有很多,都是c标准库函数,编译器在编译链接的时候,会把我们编写的代码和系统c标准库一起链接为可执行文件,很多头文件名以std开头,代表standard。c标准库不是c语言规范的一部分,因此有多种实现,比如gnu的c标准库和微软的就不同,在安装编译器工具的时候,头文件、c标准库等也都一起安装进来了。

4、为什么要这样设计?

这样设计最大的好处是模块化和封装,头文件只是函数声明,作为用户并不需要关心函数是怎么实现的,只要能查清楚有什么功能即可,起到“接口”作用,这也是为什么头文件也被称作接口文件的原因,如果每个人都写一套同名函数,只要保证规范一致,就可以保证代码兼容性。像printf这样常用的函数,如果让开发者自己重头写一遍工作量也很大,干脆出一套库可以重用,并按功能模块化组织。另外,头文件里并不是把所有函数都声明给用户使用(通过extern/static关键字),有的函数是供内部调用的,用户不需要知道,避免乱搞出问题,这样实现封装。编写C语言程序时必须有#include这一行吗?为什么有时候不需要?​www.zhihu.comzhihu-card-default.svg

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值