我们平时包含的 stdio.h 头文件,里面是不是实现了 printf 函数?
为什么会有这个疑问?因为每次使用 printf,就得包含 stdio.h ,这就导致很多同学误以为,stdio.h 里面实现了 printf。
实际上并不是,这里就涉及了头文件和库的区别。
头文件一般存放大家都要用的东西,比如函数的声明,结构体的声明,命名新的类型等等。
stdio.h 头文件,里面也只是声明了一下 printf 函数,作用就是告诉编译器,printf 是个函数,编译的时候不要报错。
至于 printf 的实现,在一个名字类似于 libc.so 这样的文件中。
.so 是 Linux 下的动态库文件,里面存放了各个函数的实现,不过他也属于二进制文件,想要看 printf 的具体实现,还得去其他地方找源码。
所以,千万不要再以为,包含 stdio.h 是因为里面实现了 printf。
那头文件里面能不能实现函数?反正头文件也只是在预处理的时候展开,想要在里面写什么都行。
不过会有这样的情况发生。
比如 1.h 实现了函数 test,1.c 和 2.c 都包含了 1.h,编译的时候,就会提示函数 test 重复定义。
还有一个类似的问题,头文件里面能不能定义变量,这个问题大家怎么看,如果你也遇到过这样的情况,欢迎在评论区交流。
全部0条评论
快来发表一下你的评论吧 !