您的位置:首页 > 其它

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

2015-01-21 23:01 585 查看
#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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐