热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C语言效率高,是有原因的

关注星标公众号,不错过精彩内容来源|typedef都说C语言编写的程序执行效率比较高,那么到底高在哪里,我们一块来学习学习。C语言由来C语

关注+星标公众,不错过精彩内容

61324f51d67b05a5403cfc9625d89f75.gif

来源 | typedef

都说C语言编写的程序执行效率比较高,那么到底高在哪里,我们一块来学习学习。

C语言由来

C语言源自于BCPL、B两种语言。

BCPL语言以及代码

1967年,剑桥大学的马丁·理察德(Martin Richards)以CPL编程语言为基础,发明了BCPL(Basic Combined Pogramming Language)编程语言。

我们在看一个用BCPL语言编写的计算阶乘的功能,代码如下:

GET "libhdr"
LET start() = VALOF
{ FOR i = 1 TO 5 DO writef("fact(%n) = %i4*n", i, fact(i))RESULTIS 0
}
AND fact(n) = n=0 -> 1, n*fact(n-1)

GET "libhdr"是包含标准库,LET start() = VALOF是程序运行时要调用的第一个函数。空括号()表示函数不需要任何参数,VALOF表示函数有返回值。

FOR i = 1 TO 5 DO是一个从1到5的循环。writef是字符格式化字符串函数,用来输出将i替换%nfact(i)替换%i4格式化之后的字符串。*n表示换行,RESULTIS 0是返回值,用来告诉系统函数执行成功。

AND fact(n) =介绍了函数fact的定义,通过接受一个参数来实现n的阶乘。

n=0 -> 1, n*fact(n-1)则是阶乘的实现,当n等于0时候,返回1(0的阶乘是1),当n不等于0的时候则返回n*fact(n-1),

AND原文是下面这样说的,如下:

The word AND causes fact to available to the previously defined function

我的个人理解是支持嵌套,那么你认为呢?

当上述功能执行后将会在终端有如下输出:

fact(1) =   1
fact(2) =   2
fact(3) =   6
fact(4) =  24
fact(5) = 120

BCPL用户指南:https://www.cl.cam.ac.uk/~mr10/bcplman.pdf

B语言以及代码

肯·汤普逊(Ken Thompson)简称“ken”,在贝尔实验室工作期间设计和实现了Unix操作系统。他基于BCPL创造了B语言。

同样的,我们来看一个用B语言实现进制转换功能。输入一个n转换为b进制,其中b在2和10之间。

/* The following function will print a non-negative number, n, tothe base b, where 2<&#61;b<&#61;10,  This routine uses the fact thatin the ANSCII character set, the digits O to 9 have sequentialcode values.  */printn(n,b) {extrn putchar;auto a;if(a&#61;n/b) /* assignment, not test for equality */printn(a, b); /* recursive */putchar(n%b &#43; &#39;0&#39;);
}

代码出处:https://www.bell-labs.com/usr/dmr/www/kbman.html

C语言

在1972年&#xff0c;美国贝尔实验室的丹尼斯·里奇(D.M.Ritchie)在B语言的基础上设计出了新的言&#xff0c;他取BCPL的第二个字母作为这种语言的名字&#xff0c;这就是C语言的由来。

以下是用C语言实现的进制转换功能。

#includevoid printn(int n, char b) {char a;if(a&#61;n/b) {printn(a, b);}putchar(n%b &#43; &#39;0&#39;);
}int main(int argc ,char **argv) {printn(8, 2);return 0;
}Terminal: 1000

跟B语言非常接近了吧。

编程语言

机器语言是二进制文件&#xff0c;汇编语言是符号语言&#xff0c;再往汇编之上是高级语言。下图是C编写的源文件&#xff0c;经过汇编和链接生成的汇编文件以及二进制文件。

8108dd74d4af86a3c2481ee5fb2fbd7e.png

机器语言

机器语言是一种指令集的体系&#xff0c;它是用二进制代码表示的语言&#xff0c;是计算机唯一可以直接识别和执行的语言&#xff0c;它具有计算机可以直接执行、简洁、运算速度快等优点&#xff0c;这是一件十分繁琐的工作。编写程序花费的时间往往是实际运行时间的几十倍或几百倍&#xff0c;而且直观性比较差&#xff0c;容易出错&#xff0c;程序的检查和调试都比较困难。

汇编语言

为了解决机器语言难以理解和记忆的缺点&#xff0c;于是就出现了汇编语言。用易于理解和记忆的名称和符号表示机器指令中的操作码。这样用符号代替机器语言的二进制码&#xff0c;就把机器语言变成了汇编语言&#xff1b;于是汇编语言亦称为符号语言。

高级语言

高级语言又主要是相对于汇编语言&#xff08;机器语言&#xff09;而言的&#xff0c;它是高度封装了的编程语言&#xff1b;是较接近自然语言和数学公式的编程&#xff0c;基本脱离了机器的硬件系统&#xff0c;用人们更易理解的方式编写程序。

例如java&#xff0c;c&#xff0c;c&#43;&#43;&#xff0c;C#&#xff0c;python都是高级语言。

C为何快速

越高级的语言&#xff0c;越人性化&#xff0c;机器负担就重。因为机器帮你处理了常见的问题&#xff0c;需要一些额外开销。而C语言是一门非常干净的语言&#xff0c;相当于裸奔&#xff0c;被设计之初就将速度大于安全之上&#xff0c;它不会检查数组索引是否会越界&#xff0c;不会检查内存是否泄漏&#xff0c;也不会检查指针是否是野指针。

在制定C标准时指出C代码是能够可移植的&#xff0c;但是如果要为了更快的执行效率&#xff0c;可以牺牲可移植性。C完全相信程序员&#xff0c;不会阻止程序员要做的事情。

C语言经过编译优化生成的机器码和和直接写汇编生成的机器码是相当的&#xff0c;所以C非常高效。

声明&#xff1a;本文素材来源网络&#xff0c;版权归原作者所有。如涉及作品版权问题&#xff0c;请与我联系删除。

------------ END ------------

83e8743c4bcebe0695e06af20b310553.gif

●专栏《嵌入式工具

●专栏《嵌入式开发》

●专栏《Keil教程》

●嵌入式专栏精选教程

关注公众号回复“加群”按规则加入技术交流群&#xff0c;回复“1024”查看更多内容。

8f2a278e65a94048b7d77ea988afcd94.jpeg

56ff162023898e4e13824567cbb7d05d.png

点击“阅读原文”查看更多分享。


推荐阅读
  • 使用HTML和JavaScript实现视频截图功能
    本文介绍了如何利用HTML和JavaScript实现从远程MP4、本地摄像头及本地上传的MP4文件中截取视频帧,并展示了具体的实现步骤和示例代码。 ... [详细]
  • Ubuntu 22.04 安装搜狗输入法详细指南及常见问题解决方案
    本文将详细介绍如何在 Ubuntu 22.04 上安装搜狗输入法,并提供常见问题的解决方法。包括下载安装包、更新源、安装依赖项等步骤。 ... [详细]
  • Leetcode学习成长记:天池leetcode基础训练营Task01数组
    前言这是本人第一次参加由Datawhale举办的组队学习活动,这个活动每月一次,之前也一直关注,但未亲身参与过,这次看到活动 ... [详细]
  • WCF类型共享的最佳实践
    在使用WCF服务时,经常会遇到同一个实体类型在不同服务中被生成为不同版本的问题。本文将介绍几种有效的类型共享方法,以解决这一常见问题。 ... [详细]
  • Spring 中策略模式的应用:Resource 接口详解
    本文探讨了在 Spring 框架中如何利用 Resource 接口实现资源访问策略。Resource 接口作为资源访问策略的抽象,通过多种实现类支持不同类型的资源访问。 ... [详细]
  • Java EE 平台集成了多种服务、API 和协议,旨在支持基于 Web 的多层应用程序开发。本文将详细介绍 Java EE 中的 13 种关键技术规范,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 最近遇到了一道关于哈夫曼树的编程题目,需要在下午之前完成。题目要求设计一个哈夫曼编码和解码系统,能够反复显示和处理多个项目,直到用户选择退出。希望各位大神能够提供帮助。 ... [详细]
  • java解析json转Map前段时间在做json报文处理的时候,写了一个针对不同格式json转map的处理工具方法,总结记录如下:1、单节点单层级、单节点多层级json转mapim ... [详细]
  • 解决Jenkins编译过程中ERROR: Failed to Parse POMs的问题
    在使用Jenkins进行自动化构建时,有时会遇到“ERROR: Failed to parse POMs”的错误。本文将详细分析该问题的原因,并提供有效的解决方案。 ... [详细]
  • centos 7.0 lnmp成功安装过程(很乱)
    下载nginx[rootlocalhostsrc]#wgethttp:nginx.orgdownloadnginx-1.7.9.tar.gz--2015-01-2412:55:2 ... [详细]
  • iOS snow animation
    CTSnowAnimationView.hCTMyCtripCreatedbyalexon1614.Copyright©2016年ctrip.Allrightsreserved.# ... [详细]
  • 使用Tkinter构建51Ape无损音乐爬虫UI
    本文介绍了如何使用Python的内置模块Tkinter来构建一个简单的用户界面,用于爬取51Ape网站上的无损音乐百度云链接。虽然Tkinter入门相对简单,但在实际开发过程中由于文档不足可能会带来一些不便。 ... [详细]
  • Java 中的等时日期(int,int)方法,示例 ... [详细]
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • Java 8 引入了 Stream API,这一新特性极大地增强了集合数据的处理能力。通过 Stream API,开发者可以更加高效、简洁地进行集合数据的遍历、过滤和转换操作。本文将详细解析 Stream API 的核心概念和常见用法,帮助读者更好地理解和应用这一强大的工具。 ... [详细]
author-avatar
时-_尚微视点
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有