scanf和printf既然是标准输入输出函数,为什么可以没有预处理头文件#include<stdio.h>,仅靠编译器识别吗?

 我来答
papyna
2012-09-25 · 超过49用户采纳过TA的回答
知道答主
回答量:172
采纳率:0%
帮助的人:156万
展开全部
不能,在生产级别的开发环境中都得包含<stdio.h>,不要说用TC或者VC6了,完全误人子弟。

给你说一下库、头文件、源文件、编译器之间的交互过程。源文件中包含头文件<stdio.h>所引入的scanf和printf仅仅是一个声明,这个声明在源文件内被编译器先和其他的代码编译,构造语法树生成.obj,这个是中间的文件,不包含scanf的实现代码。稍后在链接阶段,会把这些.obj制作为二进制的可执行文件(EXE DLL ELF DSO),那个对scanf的引用会被替换为汇编级别的函数调用,即PUSH/CALL scanf/POP这样。库就是编译器生成好的二进制文件(库有静态库和动态库之分,静态库.LIB不能自己执行,也不能被其他程序调用,而动态库.DLL可以被别的EXE DLL调用),这个文件中的代码可以被别的程序所引用,比如scanf printf的实现代码,或者是你自己编写的算法。编译器只是个字符串处理工具,处理负责语法规范的源文件,生成二进制可执行数据,至于scanf这些C函数依赖于底层的实现,和编译器可以说几乎无关。
步行者way
2012-09-25 · TA获得超过218个赞
知道小有建树答主
回答量:199
采纳率:100%
帮助的人:177万
展开全部
肯定在哪里有#include <stdio.h>的,只是你没看到而已,比如用VS写的程序
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
int i;
scanf("%d",&i);
printf("Number=%d.\n",i);
return 0;
}
这是正确的,因为stdafx.h里面有#include <stdio.h>
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
returnsr
2012-09-25 · TA获得超过296个赞
知道小有建树答主
回答量:271
采纳率:0%
帮助的人:171万
展开全部
严格的来说都得要包含,但是有一个编译器确实例外,那就是TC2.0,这么经典的开发工具,我想不管你使用什么高端的编译器,TC2.0永远都是那么经典,体积有那么小,想想现在的集成环境动不动几个G,真是很怕人。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
huayu00
2012-09-27 · TA获得超过315个赞
知道答主
回答量:105
采纳率:0%
帮助的人:83.1万
展开全部
需要包含这个哦, 有的是因为包含了其他头文件, 而那个文件中包含了<stdio.h>
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zkq193
2012-09-26
知道答主
回答量:2
采纳率:0%
帮助的人:3180
展开全部
嗯是啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式