当前位置:首页 >> 互联网
互联网

50 岁的 C 语言学,掌控 Windows、Linux、macOS 等操作系统半边天!

2025-10-29 12:18

和后视镜设置的知觉。

仪备注盘显示

防抱死液压系统对

系统会安定掌控

编队掌控

干旱掌控

儿童人身安全栓

无钥匙进入

天窗混合物

人身ABS掌控

到店面,停好车,去系统会售货机买汽水。那么系统会售货机可能就会也是基于C紧密结合行驶。随后你在店面里买东西,结账,那么收银机也是用C。当你用持卡人付款时?你Nan对了:持卡人阅读缓冲器也可能是用C母语写到的。

所有的这些仪缓冲器都是嵌入式系统对。它们就像小型测算机,底下有一个微掌控缓冲器/微执行缓冲器,在嵌入式仪缓冲器上行驶一个程序来,也叫固件。程序来需检验按键并采取相应的行动,同时向普通用户显示资讯。例如,闹钟需与普通用户互动,检验普通用户正要按什么手柄,有时还检验按了多长时间段,并对仪缓冲器开展相应脚本母语,同时向普通用户显示相关资讯。例如,的汽车的防抱死液压系统对需能够检验到润滑油的立刻栓定,并提供援助,在比较大段时间段内释放刹车上的担忧,终止栓定,从而消除失灵打滑。所有这些测算都是由一个脚本母语的嵌入式系统对完毕的。

尽管有所不同品牌的嵌入式系统对所运常用的脚本母语可能有所不同,但由于C母语的灵活官能、可靠官能、耐用官能和吻合硬体的基本外观上,C母语是核心技术开发这些计划的首选。

C母语为什么仍被广泛运常用?在今日,有许多脚本母语可以让Linux研发出比C更为高效的运常用,这些母语占有丰富的内置托,可以简化与JSON、XML、UI、网站、HTTP请求、在线元数据、媒体可用等岗位。尽管如此,C直到现在仍将长期热衷于在脚本母语一线,为什么呢?

那让我们一起来忘了C母语都有哪些无与伦比的优势。

灵活官能和高效概要母语的灵活官能更为差,可C母语毫无疑问多门灵活官能更为为好的母语。它尽量地吻合机械,同时它仅仅多数一般来说于原先的执行缓冲器框架。仅仅原先的每个框架将近有一个C母语程式码。如今,由于现代程式码造成倾斜度最佳化的十进制元样本,用手写到的概要来改进它们的掌控缓冲器并不是一件容更为易的多事。

由于它的灵活官能和可靠官能高效,"其他脚本母语的程式码、托和断言缓冲器经常用C母语借助"。像Python、Ruby和PHP这些断言官能母语的主要借助都是基于C母语,它甚至被其他母语的程式码用来与机械通信。例如,C是Eiffel和Forth的里间母语。仅仅这些母语的程式码不只能为每个要全力支持的框架转化成机械字符,而只是转化成里间的C字符,由C程式码执行机械字符的转化成。

C母语也已带入核心技术JavaScript相互间交流的一种母语。正如Dropbox工程经理、Cprogramming.com创建者Alex Allain所说:

C母语作为多门伟大的母语,可以让大多数人以能接受的方式也来备注达脚本母语里的常见于一切都是法。此外,C母语在运常用里也有语法结构也就会显现出在其他母语里,例如,常用脚本语言参数的argc和argv,以及尿素结构和变数各种类型,因此,即使对方不懂C母语,你也能看到一些共同点来与他们交谈。磁盘可用磁盘政府机构和codice_加法是C母语的重要外观上,使C母语带入系统对级脚本母语(可用系统对与嵌入式系统对)的最佳搭档。

在硬体/软件包边界,测算机系统对和微掌控缓冲器将其外设和I/O连接缓冲器可定义到磁盘电话号码。系统对运常用程序来需读取和写到入这些自度量的磁盘右方,以便与部分人开展通信。因此,C母语可用任意磁盘电话号码的控制能力对于系统对脚本母语是必不可少的。

例如,一个微掌控缓冲器可以这样内部设计:每当电话号码0x40008001的第4位被设置为1时,磁盘电话号码0x40008000里的十进制就就会被统一国际标准异步分派/转发缓冲器(或UART,一种与外设通信的常见于硬体模块)转发,并且在设置后,它将被外设系统会中止。下来演示一个C变数字符,它通过该UART转发一个十进制:

#define UART_BYTE *(char *)0x40008000 #define UART_SEND *(volatile char *)0x40008001 |= 0x08 void send_uart(char byte) { UART_BYTE = byte; // write byte to 0x40008000 address UART_SEND; // set bit number 4 of address 0x40008001 }send_uart变数的第恰巧字符可构建为:

*(char *)0x40008000 = byte;这恰巧字符是告诉他程式码将参数是0x40008000断言为一个看成char的codice_,然后终止对该codice_的度量(计算出来该codice_所看成的参数)(用最左边的*可用符),再次将十进制参数分配给该终止度量的codice_。换句话说:把变数byte的参数写到到磁盘电话号码0x40008000。

将该变数的下恰巧字符构建一下:

*(volatile char *)0x40008001 |= 0x08;在这行字符里,我们对电话号码0x40008001和数参数0x08(十进制的00001000,即第4位的1)开展了or位加法可用,并将结果存回电话号码0x40008001。换句话说:我们设置电话号码为0x40008001的十进制的第4位。我们还通告电话号码为0x40008001的参数是更为易失官能的。这就告诉他程式码,该参数可能就会被我们字符外部的某种程度所修改,所以程式码在写到入该电话号码后不就会对该电话号码的参数动手出任何也就是说。(在这种情况下,该十进制在我们用软件包设置后就被UART硬体中止了)。这些资讯对于程式码的最佳化缓冲器来说是很重要的。例如,如果我们在for尿素里这样动手,而没有指定该参数是更为易失官能的,程式码可能就会认为该参数在被设置后永远不就会改变,并在第一个尿素后再多执行该命令。

确定森林资源运常用核心技术JavaScript开展系统对脚本母语没法贫乏的一个常见于母语特官能就是污水收集,甚至对一些嵌入式系统对来说,勉强开展动态分配。嵌入式运常用程序来在时间段和磁盘森林资源方面更为为受限。对于一些实时的插入系统对,它们未能承受污水收集缓冲器的非确定官能脚本语言。如果因为磁盘不足而没法运常用动态分配,那么占有其他磁盘内嵌就比起尤为重要,比如将样本放进自度量电话号码里,就像C母语的codice_所允许的那样。那些相当严重贫乏动态分配和污水贮存的母语不一般来说于森林资源紧张的系统对。

Code SizeC母语有一个更为为小的行驶时,其字符的磁盘空置要小于其它母语。例如与C++相比,一个由C母语转化成的十进制元样本,其密度大约是由十分相似的C++字符转化成的十进制元样本的一半。造成这种情况的主要或许之一是所致全力支持。

所致(Exceptions )功能是C++比C母语多出来的一个极好功能官能,如果所致不被触发和巧妙的借助,他们其实是没有执行时间段的开销,但获益便是增大字符密度。

前面让我们以C++字符为例:

// Class A declaration. Methods defined somewhere else; class A{public: A(); // Constructor ~A(); // Destructor (called when the object goes out of scope or is deleted) void myMethod(); // Just a method};// Class B declaration. Methods defined somewhere else;class B{public: B(); // Constructor ~B(); // Destructor void myMethod(); // Just a method};// Class C declaration. Methods defined somewhere else;class C{public: C(); // Constructor ~C(); // Destructor void myMethod(); // Just a method};void myFunction(){ A a; // Constructor a.A() called. (Checkpoint 1) { B b; // Constructor b.B() called. (Checkpoint 2) b.myMethod(); // (Checkpoint 3) } // b.~B() destructor called. (Checkpoint 4) { C c; // Constructor c.C() called. (Checkpoint 5) c.myMethod(); // (Checkpoint 6) } // c.~C() destructor called. (Checkpoint 7) a.myMethod(); // (Checkpoint 8)} // a.~A() destructor called. (Checkpoint 9)该段字符里的A类、B类和C类里的方法都被度量在了外部(例如在其它元样本里)。因此,程式码未能对它们开展解析,也不明白确实就会拉出所致。所以程序来需作准备执行从它们的任何构造变数、析构变数或其他方法脚本语言里拉出的所致。解构缓冲器不一定会拉出(动手法更为为难受),但普通用户还是可以拉出,或者他们可以通过脚本语言一些拉出所致的变数或方法(显式或隐式)某种程度拉出。

如果myFunction里的任何脚本语言拉出了所致,堆绑定找寻功能需能够脚本语言所有以前紧密结合的都可的析构缓冲器。堆绑定找寻功能的一个借助将运常用这个变数的再次一次脚本语言的返国电话号码来可验证触发所致的脚本语言的 "缓冲区英文字母"(这是比较简单的断言)。它是通过利用一个专用的系统会转化成的变数(一种读取备注)来借助的,当该变数的主体拉出所致时,该变数将被常用堆绑定解绕,这将与此十分相似。

如果myFunction变数的任何一个脚本语言拉出所致,C++的绑定落幕(stack unwinding)功能需能够脚本语言所有已紧密结合都可的析构缓冲器。绑定落幕功能的一个借助是将运常用这个变数的再次一次脚本语言的返国电话号码来可验证触发所致脚本语言的 "缓冲区英文字母"(这是比较简单的断言)。它是通过利用一个专用的系统会转化成变数(一种读取备注)来借助,在该变数的主体拉出所致时,该变数将被常用堆绑定解绕,与前面这段字符十分相似:

// Possible autogenerated functionvoid autogeneratedStackUnwindingFor_myFunction(int checkpoint){ switch (checkpoint) { // case 1 and 9: do nothing; case 3: b.~B(); goto destroyA; // jumps to location of destroyA label case 6: c.~C(); // also goes to destroyA as that is the next line destroyA: // label case 2: case 4: case 5: case 7: case 8: a.~A(); }}如果从case 1和9拉出所致,则没有都可只能取走。对于case 3,则b和a需被取走。对于case 6,c和a需被取走。在所有情况下,取走顺序需得不到应有。对于缓冲区2、4、5、7和8,只有都可a只能被取走。

这个专用变数增大了字符的密度。这是C++去掉到C母语里的空间开销的一部分。许多嵌入式运常用未能负担这种额外的空间。因此,常用嵌入式系统对的C++程式码通常有一个移除所致的图案。在C++里移除所致是不种自由的,因为国际标准模板托相当严重贫乏所致来询问正确。运常用这种修改过的方案,没有所致,只能对C++核心技术JavaScript开展更为多的培训,以检验可能的疑虑或发现正确。

C++的一个原则上就是“Linux不用为不运常用的东西收费”。对于其他母语来说,十进制密度的增大就会越发更为为难受,通过其它功能官能来增大额外开销,虽然这些功能官能有用,但嵌入式系统对却负担不起。虽然C母语不就会给你提供这些额外功能官能,但他可以比其它母语占有更为轻巧的字符足迹(code footprint ),空置更为小的SSD。

为什么要研修C母语

C母语并不难学,作为多门老牌脚本母语,有关它的教程跟研修资料更为为多,那么研修C母语有哪些好处呢?

统一国际标准母语C母语是核心技术JavaScript的统一国际标准母语,辩论区或者图书底下的不少正则表达式都是基于C母语借助,这也为借助提供了最大的灵活官能,Linux也就会从里得益。

Understand the Machine(用C母语思考)当我们与同僚辩论字符的某些部分或其他母语的某些外观上时,我们多事与愿违就会 "用C母语说话":"这部分是向都可传递信息一个 "codice_ "还是复制整个都可?这里就会不就会再次发生任何 "匹配"?等等。

在系统官能现职母语的一部分字符的行为时,我们很少辩论(或思考)一部分字符正要执行的概要指令。相反,在辩论机械在动手什么时,我们可以用C母语描述(或一切都是)得很确切。

在许多古怪的C母语计划上岗位从大型在线一站式缓冲器或可用系统对虚拟机甚至是为了满足个人乐趣而制作的小型家用嵌入式运常用,你都可以用C母语借助,并且还可以在辩论区看到相关Demo。Daniel呼吁大家,不要停止自己喜欢动手的真的,比如研修C母语,它现存但小巧,并且是多门经过时间段可验证的脚本母语。

总结

或许许多脚本母语在其预设的用作上都要比起C母语,但这并不仅仅就能击败C,当考虑耐用官能优先的时候,C直到现在是帝王。世上正行驶在C母语飞轮的仪缓冲器上,无论你确实确信,你运常用的诸多仪缓冲器的的确确都只用了C母语。

注解元数据:

END

— 中选阅读 —☞张勇卸任在线副董多事长,戴珊离任;苹果称不送充电缓冲器已减省55万吨矿藏;Windows彻底道别SMB1传输协议|而出名头条☞苹果留给 iOS Linux的时间段不多了:30 天内需更为换旧版本!☞“束手无策”的俄罗斯Linux:不要再买我的软件包了,收入没法提现啊!

一键三连 「回馈」「点赞」「在看」

才智一亿核心技术人

龙岩白癜风哪里治疗好
安康正规妇科医院
深圳白癜风
急性支气管炎咳嗽吃什么药
牛皮癣
咳嗽黄痰可以喝太极急支糖浆吗
咳嗽有痰吃什么药
胸闷气短

上一篇: 人类被缩小到比蚂蚁还小几十倍之后你们打算做什么?接连不断冒险即将开始亲爱的我把孩子缩小了 解说电影

下一篇: 1953年,张国焘提出回国常居,毛主席仅提一个条件,却仍被其拒绝

友情链接