1. 聚能聊>
  2. 话题详情

一起聊编程语言之老而弥坚的C

C语言简介:
C语言之所以命名为C,是因为 C语言源自Ken Thompson发明的B语言,而 B语言则源自BCPL语言。
1967年,剑桥大学的Martin Richards对CPL语言进行了简化,于是产生了BCPL(Basic Combined Programming Language)语言。
20世纪60年代,美国AT&T公司贝尔实验室(AT&T Bell Laboratory)的研究员Ken Thompson闲来无事,手痒难耐,想玩一个他自己编的,模拟在太阳系航行的电子游戏——Space Travel。他背着老板,找到了台空闲的机器——PDP-7。但这台机器没有操作系统,而游戏必须使用操作系统的一些功能,于是他着手为PDP-7开发操作系统。后来,这个操作系统被命名为——UNIX。
1970年,美国贝尔实验室的 Ken Thompson,以BCPL语言为基础,设计出很简单且很接近硬件的B语言(取BCPL的首字母)。并且他用B语言写了第一个UNIX操作系统。
1971年,同样酷爱Space Travel的Dennis M.Ritchie为了能早点儿玩上游戏,加入了Thompson的开发项目,合作开发UNIX。他的主要工作是改造B语言,使其更成熟。
这张图就是这哥俩在一起在PDP_11上忙活的照片。
749px_Ken_Thompson__sitting__and_Dennis_Ritchie_at_PDP_11__2876612463_
1972年,美国贝尔实验室的 D.M.Ritchie 在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。
1973年初,C语言的主体完成。Thompson和Ritchie迫不及待地开始用它完全重写了UNIX。此时,编程的乐趣使他们已经完全忘记了那个"Space Travel",一门心思地投入到了UNIX和C语言的开发中。随着UNIX的发展,C语言自身也在不断地完善。直到今天,各种版本的UNIX内核和周边工具仍然使用C语言作为最主要的开发语言,其中还有不少继承Thompson和Ritchie之手的代码。
在开发中,他们还考虑把UNIX移植到其他类型的计算机上使用。C语言强大的移植性(Portability)在此显现。机器语言和汇编语言都不具有移植性,为x86开发的程序,不可能在Alpha,SPARC和ARM等机器上运行。而C语言程序则可以使用在任意架构的处理器上,只要那种架构的处理器具有对应的C语言编译器和库,然后将C源代码编译、连接成目标二进制文件之后即可运行。
1977年,Dennis M.Ritchie发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》。
C语言继续发展,在1982年,很多有识之士和美国国家标准协会为了使这个语言健康地发展下去,决定成立C标准委员会,建立C语言的标准。委员会由硬件厂商,编译器及其他软件工具生产商,软件设计师,顾问,学术界人士,C语言作者和应用程序员组成。1989年,ANSI发布了第一个完整的C语言标准——ANSI X3.159—1989,简称“C89”,不过人们也习惯称其为“ANSI C”。C89在1990年被国际标准组织ISO(International Organization for Standardization)一字不改地采纳,ISO官方给予的名称为:ISO/IEC 9899,所以ISO/IEC9899: 1990也通常被简称为“C90”。1999年,在做了一些必要的修正和完善后,ISO发布了新的C语言标准,命名为ISO/IEC 9899:1999,简称“C99”。 在2011年12月8日,ISO又正式发布了新的标准,称为ISO/IEC9899: 2011,简称为“C11”。

C语言特点
C语言是一个有结构化程序设计、具有变量作用域(variable scope)以及递归功能的过程式语言。
C语言传递参数均是以值传递(pass by value),另外也可以传递指针(a pointer passed by value)。
不同的变量类型可以用结构体(struct)组合在一起。
只有32个保留字(reserved keywords),使变量、函数命名有更多弹性。
部份的变量类型可以转换,例如整型和字符型变量。
通过指针(pointer),C语言可以容易的对存储器进行低级控制。
预编译处理(preprocessor)让C语言的编译更具有弹性。

我和C语言
我最初接触C语言的时候是在上世纪90年代,记得入门的书就是谭浩强老师那本有名《C语言程序设计》。当时主要是上课及自己写着玩,因为当时大家觉得能写C的人都比较NB,开发环境主要是Tubo C,不过给老师做项目的时候用的还是VB,因为开发Window下面的图形界面效率高很多。工作之后主要是用C做各种分布式系统的后端服务,写过不少的Informix的ESQL/C。不过随着系统架构逐渐转到B/S架构,Java用的越来越多,我C用的越来越少了,现在想一想已经有好多年完全没有碰过C了。虽然我现在不用C了,不过我并不担心C的未来,因为现在仍然有很多场景是非它莫属。我觉得C以及后来的Java分别出现在70和90年代,并且一飞冲天,独领风骚几十年,是因为他们的出现恰逢其时,解决了当时面临的重要问题。从这点来说编程语言和现在的创业公司有点像,要想大成,自身的能力和风口缺一不可。

大家聊一聊吧:
你是什么时候接触C语言的?
你在工作中用过C语言么? 主要是用来做什么?
聊聊你在用C语言的时候有哪些好的经验或者用C语言的时候出过那些糗事?呵呵,比如不小心搞的内存泄露。
学C语言的时候,看过谭浩强老师那本有名《C语言程序设计》么? 关于这本书你有什么想说的么?
你是否看好C语言的未来,为什么?

参与话题

奖品区域 活动规则 已 结束

  • 奖品一

    阿里云代金券 x 4

  • 奖品二

    手机话费 x 1

17个回答

1

沙漠的热情 已获得阿里云代金券 复制链接去分享

你是什么时候接触C语言的?
大学的时候有所接触,那时计算机系学习的C,我们数学系学的Qbasic。

你在工作中用过C语言么? 主要是用来做什么?
实际工作中好像从没有用到过。一点也想不起。

聊聊你在用C语言的时候有哪些好的经验或者用C语言的时候出过那些糗事?呵呵,比如不小心搞的内存泄露。
呵呵,这个... 是否来个死循环就可以了?记忆模糊了。

学C语言的时候,看过谭浩强老师那本有名《C语言程序设计》么? 关于这本书你有什么想说的么?
堪称经典之作,一代人的记忆!

你是否看好C语言的未来,为什么?
我曾说Java是编程语言里的微软,那C语言就是IBM,体量巨大市场占有率不低,也拥有广泛地使用人群,但是已经是巨人迟暮了,不那么有活力了,不太可能再次引领技术站在浪潮之巅了。
老手还可以继续做,新人应该再多看看,比如Python.

1

微wx笑 已获得阿里云代金券 复制链接去分享

你是什么时候接触C语言的?
09年的时候吧,第一本书入手的时间是9年10月。

你在工作中用过C语言么? 主要是用来做什么?
使用纯C的场景好像真没有。
曾经有一年多的时间工作中主语言是VC,
用来做ActiveX,当时公司有一个产品是在VOD点播系统基础上,
基于SMIL技术实现视频的在线标注剪辑等功能。

聊聊你在用C语言的时候有哪些好的经验或者用C语言的时候出过那些糗事?呵呵,比如不小心搞的内存泄露。
C、VC中最关键的是指针了,声明和销毁的时候都要赋值为Null,防止出现野指针。
糗事的话,好像是遇到过程序运行了退不出去,结束不了,只能重新启动电脑。
内存泄露的话每个用过C的人应该都遇到过。

学C语言的时候,看过谭浩强老师那本有名《C语言程序设计》么? 关于这本书你有什么想说的么?
谭浩强老师的是比较有名气,但我没有看过,网上好像看过别人做的相关笔记总结。

你是否看好C语言的未来,为什么?
从编程语言的排名,C语言擅长的领域来说,
感觉10年内都还有用武之地。

1

饭娱咖啡 已获得阿里云代金券 复制链接去分享

你是什么时候接触C语言的?
大学时候的必修课

你在工作中用过C语言么? 主要是用来做什么?
工作中几乎都不用C语言,用的都是Java

聊聊你在用C语言的时候有哪些好的经验或者用C语言的时候出过那些糗事?呵呵,比如不小心搞的内存泄露。
经验甚少,因为几乎没用过

学C语言的时候,看过谭浩强老师那本有名《C语言程序设计》么? 关于这本书你有什么想说的么?
这本书应该是很经典的一本编程入门书啊。当时所有专业都要学这门课,用的就是这本书。
我之所以会选择程序员这份职业,就是当时学习C语言的时候感觉很有意思,学起来也不吃力,自信心爆棚。所以我感觉《C语言程序设计》应该很多人进入编程的领路人。

你是否看好C语言的未来,为什么?
C语言还是有未来的,至少我知道很多底层的东西还是用C语言写的。
但是现在入门编程的语言可能不会是C语言了,已经有小学或者初中开始了Python的教学。

0

浮生递归 已获得阿里云代金券 复制链接去分享

你是什么时候接触C语言的?
大学里吧。大学里学计算机编程语言,不是vb就是c。通常大家都会vb娴熟点,毕竟图形界面的东西容易上手很多。特别是对那些大学只想在游戏中度过的人类而言。

你在工作中用过C语言么? 主要是用来做什么?
有想用过,但没用上。主要用来在服务器上做后端系统,还是用c比较保险吧。

聊聊你在用C语言的时候有哪些好的经验或者用C语言的时候出过那些糗事?呵呵,比如不小心搞的内存泄露。
内存泄漏好像是c语言的经典梗,经典到其他语言说自己优点或者跟c对比的时候,都会特别提一下,不会出现内存泄漏的问题,哈哈。因为平时主要用asp.net做开发,所以c的经验和糗事还没怎么碰到。

学C语言的时候,看过谭浩强老师那本有名《C语言程序设计》么? 关于这本书你有什么想说的么?
没有,看的就是学校里发的教材。这本书,应该认真搞c的人,都会知道吧。大学生不算。毕竟很多大学生只想着尽可能悠闲的毕业,并没有想着在开发方面有多少建树。

你是否看好C语言的未来,为什么?
看好,在c端的程序很大一部分还都是采用c来开发的,所以c语言的未来,还是有很长一段辉煌期吧。

0

cjsoldier 已获得手机话费 复制链接去分享

这个话题挖的太深了,快到计算机发展史了,有意思。大胆预测一下下一个话题肯定跟计算机发展史有关。过年了待在家里太无聊了,聊主门都到家了吧,快出话题,我要一次答十个,然后改名叫“答题小能手”,大家觉得怎么样?

你是什么时候接触C语言的?
大一上学期图书馆借了本c语言的书,只看了函数那一章就没再看了,下学期开了门c语言的课,书是我们学校自己出的,讲的很简单,跟自己自学差不多,但这算是正式接触了吧。
你在工作中用过C语言么? 主要是用来做什么?
工作中没用过。
聊聊你在用C语言的时候有哪些好的经验或者用C语言的时候出过那些糗事?呵呵,比如不小心搞的内存泄露。
把别人的代码复制下来用VS2005或者2008编译老是通不过。后来才知道还有个ANSI和UNICODE方式编译。还有什么宽窄字符问题啦,傻傻分不清楚,每个人的代码风格不一样,有的加_t有的没有,我心里那叫一个苦啊。我只想说“我去年买了个表,老子不跟你玩了”。
学C语言的时候,看过谭浩强老师那本有名《C语言程序设计》么? 关于这本书你有什么想说的么?
没看过谭浩强的那本书,但是听别人说这本书太老了,现在都不推荐看这本书了。不过我相信,在当时它一定是一本好书。

你是否看好C语言的未来,为什么?
c语言是系统级的编程语言,是可以编写操作系统的。现在语言虽多,但大多都是脚本语言。系统级的编程语言目前我知道的也只有c++,golang和rust而已。写底层的东西golang和rust还不具备这样的实力跟c抗衡。也许你会说以后是多核并行的天下,golang和rust擅长这个,但那也只是应用层的软件会用到。我不相信有多少人一言不合就用其它语言写个操作系统出来。

1

1253166255502029 复制链接去分享

我是工作很多年才开始学习C语言的,以前做电工PLC编程。要用单片机开发,先学习了点汇编语言,后来掏钱晋级。才知道C语言这么牛逼,我们做硬件的不学习C语言是不可能的。

0

1744713600732863 复制链接去分享

钱才是一切动力的源泉!!!

0

nikko_heli 复制链接去分享

你是什么时候接触C语言的?

   大学时候开始学习的,之后写各种课程设计都是用的C。

你在工作中用过C语言么? 主要是用来做什么?

   再后来第一份工作就是做内核驱动,一直用C写driver。还是很有感情的。

聊聊你在用C语言的时候有哪些好的经验或者用C语言的时候出过那些糗事?呵呵,比如不小心搞的内存泄露。

   习惯了,觉得用C语言简单工整。但确实搞国内存泄漏。还得有配套的一些检查机制来避免问题的发生。

学C语言的时候,看过谭浩强老师那本有名《C语言程序设计》么? 关于这本书你有什么想说的么?

   看过,不过印象不深了。

你是否看好C语言的未来,为什么?

   挺好吧,Linux Kernel很多还是C。
0

1379317388091598 复制链接去分享

不是很懂啊 但很想学

0

1379317388091598 复制链接去分享

不是很懂啊 但很想学

0

1940919304453231 复制链接去分享

我现在是学习的C语言。一招鲜吃遍天,或者说专注于一个把它学透。我打算在学点Python,毕竟一个是不够的。

0

1940919304453231 复制链接去分享

第一次是14年大一开的专业课,老师教,自己胡乱听点皮毛。第二次是前几个月,考研准备初试C程序设计,就是谭浩强第四版的书,自己在比站听的视频又把课本看了几遍,因为是考研,所以是针对性的复习。后面的是文件之后就没看,可是从其他地方看到,谭老师的不适合更好的学习C语言,不知道是什么原因。

0

kench233 复制链接去分享

你是什么时候接触C语言的?
初中吧,因为我参加noip系列的比赛,语言要求必须是p/c/c++,当时老师推荐的是让我写c(后来发现老师就是个坑货。。。最终在初二自学了c++)
你在工作中用过C语言么? 主要是用来做什么?
现在基本不用c了,用c++比较多。基本都是用来写对运算速度要求比较高的项目
聊聊你在用C语言的时候有哪些好的经验或者用C语言的时候出过那些糗事?呵呵,比如不小心搞的内存泄漏。
scanf一定是取地址!取地址!取地址!慢慢都是泪不想说了。。。(论比赛爆零的原因)
学C语言的时候,看过谭浩强老师那本有名《C语言程序设计》么? 关于这本书你有什么想说的么?
最初学c时老师就是给我推荐的这本书,我看的是第二版,这本书感觉介绍的c语言很基础,不过很详细。但对于我做算法竞赛的题来说,就作用很小了(没有数据结构之类的教程)。听说第三版已经出了,不知道怎么样。
你是否看好C语言的未来,为什么?
说实话,个人对c还是有点感情的,但是c语言毕竟没有c++等更高级的语言灵活,所以我认为c可能会被淘汰。

0

aoteman675 复制链接去分享

1、你是什么时候接触C语言的?
大学学的第一门课程就是谭浩强的《C语言程序设计》,那时候用的编辑器还是visual c++6.0。后来写C++和C#用Visual studio 2013。
C语言第一次成功就是“hello world”,自今难忘的代码之路。
2、你在工作中用过C语言么? 主要是用来做什么?
写硬件程序的时候用到,比如物联网硬件编程之类的,其他程序就是C++或者Java为主了。
3、聊聊你在用C语言的时候有哪些好的经验或者用C语言的时候出过那些糗事?呵呵,比如不小心搞的内存泄露。
指针异常,结构化出错,没有字符串关键字的C语言真心难受,数组越界,内存垃圾消耗,空指针。
4、学C语言的时候,看过谭浩强老师那本有名《C语言程序设计》么? 关于这本书你有什么想说的么?
入门必学,红色的封面是一代程序员的记忆。这本书对入门还是挺有用的,把C语言分析很简单易懂,对于没有编程基础的可以看一看。
5、你是否看好C语言的未来,为什么?
C语言的底层架构还是无法撼动的,比如好的系统底层都是C语言写的。如果往应用层发展的就不建议深入了,每个语言都是不同的发展领域,各领风骚。C语言不会变,变的是应用层语言,比如Java,Python,C#等。

0

1667106172631144 复制链接去分享

不好意思1,不太懂哦

0

1463416859813159 复制链接去分享

笑笑

0

今生n28 复制链接去分享

我觉得谭浩强这本c语言是个基础,每个程序员都是从这本书开始的。c不会淘汰,c依然是基础。