C语言可以干什么?
今天一个同学上课问我,C语言可以干什么?当时我的回答是Windows系统大部分代码是C语言。我说的有问题,正确应该是“Windows内核大部分都是用C写的”。c语言可以做一切事情。
那为什么我学c语言感觉什么也不会呢。
答案是,你学的只是c语言语法,是与平台无关的,不调用图形接口,就没法写windows应用。不调用操作系统网络接口,就没法写通信程序。
这个与c的发展历程有关,现在的c多用于底层库开发,而多年前,这个c相当于现在的安卓java,是几乎所有操作系统程序开发的标准语言,现在因为其过使用起来过于繁琐复杂,开发周期长,被java等高阶语言所替代。
举几个用c开发的程序例子。
·notepad(记事本)
·pidgin(全平台的聊天软件)
·apache、nginx这两个服务器软件几乎是所有linux服务器的标配。
为什么要学习C语言?
我们现在学C语言,只是因为它是我们的必修课。我觉得“为什么而学”这个目的是最重要的,目的不明确就没法学好。这也是为什么很多同学必修C语言却觉得没学明白的原因。因为学习的目的不明确,学习当然也没有动力。还有一个原因是C语言是工程实践性很强的语言,它不是来自某个研究所某个大学学院,而是实实在在从项目需要中产生,伴随着Unix(一种计算机操作系统)的兴起而流行,语义简明清晰,功能强大而不臃肿,简洁而又不过分简单。
为什么学不懂?
除了个人问题,我觉得老师原因和教材也有关系,老师要兼顾到全班一百多号人学习,自然不可能面面俱到。我们现在用的教材是谭浩强老先生的《C程序设计》,谭浩强老先生年生,现在已经80岁了。C语言的第一次标准化一直到年才完成(俗称C89),请注意那时候谭浩强已经55岁了!时间再往后十年,到了年的时候,C99标准终于问世。但因为这一标准比较新,大部分编译器还不能支持其中的许多特性。因此大部分沿用的还是C89的特性。
在这样的背景下,第二年,谭浩强的《C程序设计》出版了,而这一年,谭浩强已经66岁了。抛开谭浩强66岁依然写作这一点不谈,若是站在当时的背景下来看待,事实上这本书也还是可读,可学,有价值的。谭浩强老先生的《C程序设计》这本教材好不好?现在的观点来看当然不好。现在想学习C语言的人,不推荐采用他的书。但这主要是因为软件行业发展快速,他的书籍内容较老导致的。
程序员最重要的能力就是自学,计算机方面经典的书、网上文章都很多,自己找来学,都大学了不要还是搞高中那一套,跟着老师转。大学老师很多教书都是应付的,他们理论可能学的好,但是不一定代码写得好,代码写得好,也不一定教得好,千万不要被带到坑里面去。
学C语言到底学些什么?
有的同学肯定指着目录说我知道我知道,有变量,数据类型,循环语句,函数,哦哦哦,还有指针等等!
所谓「语法」,就是入门教材里最着重讲解的内容。也就是那些所谓的变量、数据类型、分支判断、循环、函数、指针等等。
这些内容比较枯燥,但是好消息是这些内容并不难,都是一些格式化的东西。只要你多练习,就会自动的刻在你的脑子里,成为一种下意识的习惯。但是「语法」本身其实没什么用。因为它只是一种格式规范,你学得再好,也不能引导你写出厉害的程序。因为在软件设计中,实际上最核心的部分还是在于其「函数库」部分。
什么是「函数库」?简单来说,函数库就是别人编写好的C函数,直接提供给你用,你只要调用里面的函数,就能实现一定的功能。例如printf()函数,你肯定知道,只要调用这个函数,你就能够在那个黑糊糊的窗口里显示一段文字。你并不明白printf()的内部工作原理,但是你知道你只要按照说明去调用,就能够实现对应的功能。这就是函数库——别人写好的,打包送到你面前,你可以自由调用来做各种各样的事情的函数集合。
我来说几个来自函数库的函数,例如CreateWindowEx()函数可以用来创建一个窗体(这个函数由微软提供),例如GaussianBlur()函数可以用来对一个图像进行高斯模糊处理(这个函数由OpenCV提供),再比如ev