去掉#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
相关文章推荐
- Android程序能够构建和运行,但是报以下报错,为什么?
- 指针方面的问题,此程序调试显示是正确的,但是运行起来的结果是错误的为什么?求解
- Android程序能够构建和运行,但是报以下报错,为什么?
- OD提示 "为了执行系统不支持的动作, OllyICE 在这个被调试的程序中注入了一点代码, 但是经过5秒仍未收到响应..." 解决办法
- win10系统获取管理员权限卸载程序、删除文件等听语音 浏览:9507|更新:2016-02-23 02:27 很多用户升级win10系统以后,发现卸载某些程序或者删除某些文件的时候,会出现权限不够,
- xcode6.1新建一个ios程序,为什么自动运行viewController这个类
- stm32系统在线调试时程序运行正常输出正常,但是一旦把程序烧写进去则输出不正常
- 问题阐述: 本人使用mini6410开发了一个sqlite数据库的程序,在mini6410的linux系统下已经能够成功运行了。因为Android使用的也是linux内核,所以我想当然的认为按照同样
- Asterisk[1] 是一个开放源代码的软件VoIP PBX系统,它是一个运行在Linux环境下的纯软件实施方案。Asterisk是一种功能非常齐全的应用程序,提供了许多电信功能,能够把你的x86
- 在本地我们调试运行AJAX.NET程序完全没有问题,但是一旦上传到服务器就会出现很多Web.config文件异常
- 为什么xcode中有些程序可以切换ios6/7模拟器,有的程序不行,为什么xcode有iPhoneSimulator6.1.sdk但是不能运行6的模拟器
- SQL2000系统表、存储过程、函数的功能介绍及应用2009年01月21日 星期三 11:38虽然使用系统存储过程、系统函数与信息架构视图已经可以为我们提供了相当丰富的元数据信息,但是对于某些特殊的元数据信息,我们仍然需要直接对系统表进行查询。因为SQL
- OD提示 "为了执行系统不支持的动作, OllyICE 在这个被调试的程序中注入了一点代码, 但是经过5秒仍未收到响应..." 解决办法
- 解决api-ms-win-crt-runtimel1-1-0.dll缺失的方法 api-ms-win-crt-runtime-l1-1-0.dll是电脑系统重要组件,如果缺少会导致很多程序无法运行,
- 实现很多程序能够实现的运行过程中自动升级,升级完成后自动打开升级后的程序
- 为什么j2ee的web研发过程中,有些jsp、html页面中,没有引入某个js(如test.js),却使用了test.js的某个函数,并且系统能够正常运行??
- 为什么程序运行的结果,虽然是倒序输出了,但是有输出了一串别的汉字
- 求20个韩信点兵数,为什么这个程序运行没结果?
- 请问,在下面这个函数中m_pMainWnd = &dlg;的作用是什么?为什么我把这句话注释起来之后程序依然是正确的啊?
- 技巧(5)- 如何让这个程序在系统里同时只运行一个(如果这个exe程序已经运行了,就不再运行)