去掉#include 《stdio.h》这个程序在许多系统中仍然能够运行,但是在某些系统中运行起来却慢很多是为什么

#include <stdio.h>
main()
{
	register int c;
	while((c=getchar())!=EOF)
		putchar(c);
	return 0;
}

上面程序的作用是把它的输入复制到输出:从这个程序黄总去掉#include语句,将导致程序不能通过,因为这时EOF是未定义的,假定我们手工定义了EOF(当然这时一种不好的做法):

#define EOF -1
main()
{
	register int c;
	while((c=getchar())!=EOF)
		putchar(c);
	return 0;
}
这个程序在许多系统中仍然能够运行,但是在某些系统中运行起来却慢很多是为什么?

因为函数调用需要花费比较长的程序执行时间,因此getchar经常被实现为宏,这个宏在stdio.h中定义,因此如果一个程序没有包含stdio.h头文件,编译器对getchar的定义一无所知,在这种情况下,编译器会假定getchar是一个返回类型为整形的函数,实际上,很多c语言实现在库文件中都包括有getchar函数,原因部分是预防编程者粗心大意,部分是为了方便哪些需要得到getchar地址的编程者。因此程序中忘记包括stdio.h的效果就是,在所有getchar宏出现的地方,都用getchar函数太偶用来替代getchar宏,这个程序之所以运行变慢,就是因为函数调用所导致的开销曾多,同样的一句也完全使用于putchar

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值