| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1993 人关注过本帖
标题:printf函数是静态链接库函数还是动态链接库函数???????
只看楼主 加入收藏
蹲厕所里数蛆
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-2-22
结帖率:0
收藏
 问题点数:0 回复次数:3 
printf函数是静态链接库函数还是动态链接库函数???????
执行链接时,OBJ文件与库函数链接,请问:
printf函数是静态链接库函数还是动态链接库函数???????










[ 本帖最后由 蹲厕所里数蛆 于 2013-3-9 15:21 编辑 ]
搜索更多相关主题的帖子: 函数 还是 动态 
2013-03-09 15:16
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
跟运行平台有关

授人以渔,不授人以鱼。
2013-03-09 18:11
wuxianqin007
Rank: 1
等 级:新手上路
帖 子:8
专家分:6
注 册:2013-3-9
收藏
得分:0 
一般来讲,像这种libc的基本库函数都是动态链接的,这样的话比较节省内存
2013-03-09 18:29
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
在DOS下,printf()函数可执行代码是静态链接嵌入到exe文件中的,但在Windows下,由于不再允许程序直接操作硬件,读写真实设备或虚拟设备的输入输出函数,都强制应用程序调用操作系统提供的接口(即DOS时代下的系统中断服务,TC和MSC均允许绕开DOS中断直接操作显示内存,故TC的cprintf()函数是直接写屏的,速度超快),这部分程序是操作系统提供的,原则上不需、也不应该嵌入到应用程序中(正如DOS时代的系统中断程序是在BIOS或DOS中的一样),这些函数的具体可执行代码,都放在编译环境与系统相关的DLL文件中,必须与应用程序一并发放。

在逻辑上,编译器可以不使用DLL,把printf()的可执行代码嵌入到应用程序中,但它绕不过自己的实际上司操作系统,当这些要求向设备进行输入输出动作的指令发出,系统就会接收控制权,把真实操作拦截到自己的输入输出DLL中,废掉你自己的那些东西,如果你或编译器不按规矩来,比如不遵守调用API的协议、直接向显示内存写内容等等,这样乱写printf()实现代码,就会收到黄牌警告或红牌罚出场。

尽管我已经无数次说过,但这里仍然不妨再重申一次:C语言没有定义任何输入输出功能。所有输入输出函数,包括printf(),都不是C语言固有的东西。不管哪个编译器,它提供的printf()函数代码库,除了行为表现应与C标准规定的相符外,具体如何实现的细节取决于它与操作系统的了解和结合程度,同一个编译器在不同的操作系统平台下,其printf()函数的实现代码是不一样的(甚至拥有各不相同的标准之外的扩展功能),C/C++程序的可移植性,最多在源代码上可移植,但移植的时候必须要重新编译,不存在拿着在Windows下编译出来的exe文件到Linux下可直接执行这样的可移植性(基于虚拟机.NET C++程序才可以这样),原因就是如上所述。

对硬件为所欲为的时代已经一去不复返了!

[ 本帖最后由 TonyDeng 于 2013-3-9 18:42 编辑 ]

授人以渔,不授人以鱼。
2013-03-09 18:39
快速回复:printf函数是静态链接库函数还是动态链接库函数???????
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015670 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved