一.函数库的区别

linux下的C函数库和windows下的函数库系统调用的机制不一样,Glibc包含了主要的C库。
这个库提供了基本例程,用于分配内存、搜索目录、打开关闭文件、读写文件、字串处理、模式匹配、数学计算等等。

所说的机制不一样不单是指中断号的问题,中断号也是通过input参数和output把函数地址和输出地址定位在寄存器的,那些函数在windows和linux下的实现应该是不一样的,就拿文件系统来说,ext3和fat32的怎么可能一样.还有mm内存管理,都是不一样的.中断还是属于硬件层的,X86上的应该都差不多,但操作系统层的实现就大不相同了。

windows C库格式为  .dll( 动态链接库英文为DLL,是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件)。 生成的*.exe 。

linux C 库格式为  .so(.so 为共享库 : 动态库(shared library/shared object/dynamic link library)。生成*elf(Linux ELF ELF = Executable and Linkable Format),可执行连接格式,是UNIX系统实验室(USL)作为应用程序二进制接口(Application Binary Interface,ABI)而开发和发布的。扩展名为elf)。

标准 C 库函数以及数据类型等在任何操作系统下都可以编译运行,并且效果是完全一样的,但其内部的实现原理及存储方式不一定一样。这些库函数实际上在不同系统操作系统上的实现就是依赖于操作系统本身的 API。Linux 上当然就是 Linux 的 API,而 Windows 则是 Windows API。就像最常见的 fopen 函数,在 Windows 上他是通过 CreateFile 函数实现的,而 Linux 上则是通过 open 函数。API 说白了就是函数,通常说 API 指的是操作系统函数。Linux 的 shell 相当于 Windows 的命令行,它只不过是一个解析命令和执行程序的环境。这个环境其实也是一个独立的程序。任何平台的程序要运行,就得依赖于该操作系统的 API。

二.其他区别

1)系统平台不一样        
底层开发就涉及到了系统内核的问题,对于linux来说,你可以知道它里面是什么结构,而windows。。。

2)编译器环境不一样
linux采用gcc编译器,gdb调试工具,和多种可视化的编辑器如 emacs,kedit等等,也有文本的vi/vim,GDB的功能是非常强大的,个人认为较win下的好。尽管win下的mingw,devcpp集成了gcc,但是搞的总让人不爽~,gcc对标准的支持是相当的好。

3)针对人群不一样
win下主要还是面向商业化的开发,而绝大多数的编程爱好者则喜欢属于自己开阔自由的系统下编程,不愿意禁锢在windows下(MS)的包围中。

4)发展方向不一样。
OpenSource的思想已经在linux这片净土开花(参见GPL....)。
找资料方便,源代码公开,可以体验开发的乐趣。
win下,ms逐步把一批开发人员束缚在它自己的系统里面,开发环境越来越傻瓜,这能不能叫人性化呢?搞到最后。。。可能越走越远~

5)版权问题
win下的好多好多东西都涉及到版权问题,linux的free软件虽然是自由软件,不过好多好多都是免费用于商业化的。。。当然有的需要开放源代码,好多也不需要。C++的区别也差不多

三.总结

Linux 简单来说跟 Windows 一样是一种操作系统,只是两者之间的使用方法和习惯有所区别。具体的区别其实很大,不过已经不是能在这里说清楚的事情了。

对于 C 编程来说,他们最大的区别就是提供给你的系统相关的特性不一样。这个导致了所谓的移植性问题以及平台特性的问题。形象点的比喻是你可以认为 Linux 和 Windows 都是人。他们都懂一部分英语,但是一个的母语是汉语,一个是德语。你用的英语如果他们刚好都懂,那他们就能很好的帮你做事。如果你说的英语他们不懂,那就只能用他们的母语给他们说。这样的结果就是你用德语说的 Linux 听不懂;你用汉语说的 Windows 又听不懂。所以,如果是简单的编程,那他们没有多大区别。如果是复杂的...你就准备翻译一方的母语成另一方的母语吧。

由于版权原因,库函数的源代码一般是不可见的,但在头文件中你可以看到它对外的接口。
库函数是人家写的程序,你拿来用在你的程序里.
首先标准只是规定了这些函数的接口和具体的运行效率的要求,这些函数具体是怎么写得要看各个编译器的实现和平台。

如果你用的是visual studio的话,微软提供了一部分C运行时(CRT)的源码,里面会有memcpy,strcpy之类的函数的实现,我的visual studio 2005下的路径是C:\Program Files\Microsoft Visual Studio 8\VC\crt\src,你可以对比参照一下。

其他差异详见:《Linux/Windows下 C/C++开发的差异zz

四.问答

1)求教 C语言的数学库函数与标准库函数 有什么不同?

c语言的标准变化了好几次,现在说的标准C语言指的是99年制定的C99标准。其中定义的函数库就是C语言标准函数库。具体有哪些你可以查询《C语言参考手册(C:A Reference Manual,Fifth Edition》。

但事实上,每个C/C++编译器都带有自身的函数库,一般都兼容C标准函数库,但也有个别的有些细节上的出入。所以,一般你只要考察你所用编译器的函数库就行了(通常都可以从帮助中得到)。

数学函数是标准库函数的一种。

标准库函数优先使用了,可实现平台无关。应用程序接口API函数是平台相关的。

编译器函数是指MFC/VCL之类的类库函数吧,打包成程序后必须带上函数库。

标准库函数是由一个语言的标准来决定的,API函数是由操作系统提供的。标准库函数大多数时候也要通过调用api函数来达到目的。但是自己用的时候,我觉得还是能调用标准库函数实现这样就最好。这样移植性好得多。
标准库函数自然是优先了,标准库可实现与平台无关。
如果用到系统编程的话,使用API,但是一般的IDE都会对API有封装,比如mfc,所以使用mfc更方便些。当然有些时候直接用API解决某些问题也是很方便的。

编译器函数?如果指mfc之类的,就是上面我说的,

否则如果你用的C++的话,一般的编译器都有实现标准库.直接使用标准库就行.
还有一些其他的流行的库也可以。C++的准标准库boost,可以参考www.boost.org。
linux下的qt,是个GUI库,类似windows下的mfc,但是是用标准c++实现的。

标准库函数:是一种程序规范,提供一套标准的函数,可能有好几种规范,如c99,标准c
编译器函数:是用来告诉编译器怎么编译你的程序的,如#define,#typedef
API函数:操作系统提供,的函数用来支持这个平台上的操作的,如MFC
标准库是一种规范和标准可以非常方便的跨平台。编译器函数一般是编译器的类库提供的,API一般由操作系统来提供。后两者都有一定的局限性

C++和C在linux下 和在windows下有什么区别?的更多相关文章

  1. 使用cygwin移植Linux的项目到Windows下之总结(转)

    使用cygwin移植Linux的项目到Windows下之总结(转) 原文 http://my.oschina.net/michaelyuanyuan/blog/68615?p=1   一.why   ...

  2. Linux如何下解压windows下的.zip和.rar文件

    Linux自带的unzip命令可以解压windows下的zip格式的压缩文件. 如何unzip没安装,可以yum 安装下: yum -y install unzip unzip命令 语法:unzip ...

  3. Linux换行符和Windows换行符的区别与转换

    不同系统文本文件的行尾换行符不同:    Windows为一个回车'\r'(CR或^M)和一个换行'\n'(NL或LF)(括号内是其它显示方法)    Linux为一个换行'\n'    Mac为一个 ...

  4. 在Debian下安装使用Windows下的字体

    转载:http://blog.163.com/lixiangqiu_9202/blog/static/53575037201251224553801/ Debian下的字体不太好看,没有windows ...

  5. Linux 下的类似Windows下Everything的搜索工具

    Windows NTFS有个超级快的搜索工具Everything,非常好用,Linux下有几个类似的命令行工具,太难用了,推荐一个catfish,类似Everything,有GUI,可以自定义一个快捷 ...

  6. 忽然有一种感觉:云存储必须从系统级定制,所以必须对Linux相当熟悉。Windows下开发软件的模式已经过时了

    看了诸多招聘帖子以后的感觉- 工作内容: .存储相关产品的设计.开发和维护. .Linux系统应用程序研发. .主流Linux内核文件系统研发. .自动化测试框架和工具的研发. 职位要求: .计算机相 ...

  7. linux mint 19 打开 Windows 下制作的 TXT 文件时‘乱码’

    因为 Linux 采用的是 UTF-8 编码,Windows 的中文编码是 GB18030. 解决的办法:让 Linux 的文本编辑器支持 GB18030 1.我们安装一个小软件"Dconf ...

  8. ubuntu下怎么合并windows下分割的zip包

    cat ziptest.z* > google_bak.zip 点击打开链接http://blog.51yip.com/linux/988.html

  9. ubuntu下无法打开windows下ntfs文件系统的解决方法

    例如:/dev/sda5无法加载,使用如下命令 sudo ntfsfix /dev/sda5 如果命令没有安装,先安装(sudo apt-get install ntfsprogs).

随机推荐

  1. Linux中环境变量文件

    一.环境变量文件介绍 转自:http://blog.csdn.net/cscmaker/article/details/7261921 Linux中环境变量包括系统级和用户级,系统级的环境变量是每个登 ...

  2. oracle having字句

    现在要求查询出职位的平均每个职位的名称,工资,但是要求显示的职位的平均工资高于2000.        即:按照职位先进行分组,同时统计出每个职位的平均工资        随后要求直显示哪些平均工资高 ...

  3. 微信小程序 无限加载 上拉加载更多

    加载更多,其实就是再次向接口发送请求,把返回的数据,追加到渲染页面的数组里的过程,具体实现实例如下: demo.js // pages/project/project.js const app = g ...

  4. JavaScipt 中的事件循环(event loop),以及微任务 和宏任务的概念

    说事件循环(event loop)之前先要搞清楚几个问题. 1. js为什么是单线程的? 试想一下,如果js不是单线程的,同时有两个方法作用dom,一个删除,一个修改,那么这时候浏览器该听谁的?   ...

  5. 将数组,矩阵存入csv文件中

    我们在做各种模型训练时,往往会先将数据处理成矩阵,然后交给建模的人去训练.这时通常数据清洗者提交的是保存了矩阵的文件,一般为TXT或csv,接下来主要讲解我在实现这个过程中遇到的一些问题. impor ...

  6. win10与centos7的双系统U盘安装(三:win10启动项的恢复)

    启动项的恢复比起前面两篇就简单多了,就是一个修改启动项的引导文件即可. 首先登陆超级管理员账户,也就是账号为root,密码为你在篇2设置的密码,注意linux系统下输入的密码不可见,小白容易误以为是b ...

  7. [POJ3481]Double Queue

    Problem 0 结束操作 1 K P 将一个数K以优先级P加入 2 取出优先级最高的那个数 3 取出优先级最低的那个数 Solution Splay模板题 Notice 是输出数而不是输出优先级. ...

  8. .net core 之Hangfire任务调度

    Hangfire可用作任务调度,类似延迟任务.队列任务.批量任务和定时任务等. 一.nuget Hangfire包 找到Hangfire.AspNetCore和Hangfire.SqlServer包, ...

  9. sass 继承 占位符 %placeholder

    @extend //SCSS .btn { border: 1px solid #ccc; padding: 6px 10px; font-size: 14px; } .btn-primary { b ...

  10. js 循环遍历数组

    var a =[1,3,4]; a.each(functiom{ .... }) or for (var x in a ){ .... }