“C语言还用再学吗?嵌入式工程师可是每天都在用它,大家早就烂熟于心,脱离语言这个层面了”。 【【胆小的麦迪文】世界这么大,我选C语言】https://toutiao.com/group/6651465530358104580/?iid=15906422033&app=explore_article×tamp=1548692142&group_id=6651465530358104580&tt_from=copy_link&utm_source=copy_link&utm_medium=toutiao_ios&utm_campaign=client_share 这样说不无道理,这门古老的语言以其简单的语法、自由的形式的而著称。 使用C完成工作并不会造成太大困扰,所以很少有人会回头再仔细看看它。但在现实中却经常会有一些令人抓狂的bug,最终发现竟是语法使用错误造成的,而作者不乏老程序员。 仔细想想,其实每个人对C都有些含糊不清的地方,C好像又变得复杂起来。 但事实却不是这样,C语言依然是简洁的,它的语法只需几页纸便可讲清。 回想起来,其实是我们学得太过匆忙、太过功利,记忆了一堆零碎的语法便开始开发生涯了。 追问本质的学习被很多人看作是不必要、过于学究的。 而肤浅学习的人往往是以修补各种漏洞、缺陷作为自己的主要工作,而且乐此不彼。 我没有能力和精力去彻底弄懂C的本质,但在工作了几年后,我想重新认识一下C,对含混之处作一些澄清。 当然对熟悉C的人来说,常规的应用式学习是没有意义的,我们要深入本质,去看看C的本来面貌。 C语言高效,易移植,功能强大。 而在形式上它又是自由的,留了更多的责任给编译器和开发者。 对一些实现细节,规范不作具体要求,而是由编译器根据需要自行决定。 这一类细节可以分为以下三类: (1)基于实现(implementation defined)。要求编译器文档给出明确定义,使用者对其无歧义。 (2)不作说明(unspecified)。编译器可以选择自己的处理方式,且该方式可能会变,不在文档中作定义,使用者不可作假设。 (3)不作定义(undefined)。编译器可以选择不去处理这些case,所以可能出现任何结果,应避免使用。 学习从来不是一个人的事情,要有个相互监督的伙伴,工作需要学习C/C 或者有兴趣学习C/C 的伙伴可以加我Q_2208165112。一起学习,一起进步。还有免费学习资料可以给各位伙伴 C 复杂凌乱的语法深受诟病,但C偶尔也会从C 引进一些好的语法,而且还会另外作一些扩充。C规范可分为三个阶段: (1)规范形成前(旧C、old style C)。基本以第一版的《The C Programming Language》为规范,C语言的基本面貌已经确定,与我们现在看到的差别不大。由于历史原因,仍有编译器只支持旧C(我第一个东家就是)。 (2)旧规范(C89或C90)。近乎完美的版本,也就是我们现在基本看到的C,是目前支持得最好且应用最广泛的版本。《The C Programming Language》也随即出了第二版,至今未更新。 (3)新规范(C99和C11)。时隔20年后,C从各大编译器吸取营养,作了一些不错的扩展。但平时使用得并不多,而且还没有得到完全的支持。其中C99变化较大,C11更多的是对C99的调整。 |
|
来自: 山峰云绕 > 《C语言数据结构描述Windows程序设计》