学习C语言什么都做不了,为什么你还学?是这样吗?

对于大部分初学者,学习C语言的目的是希望做一名合格的程序员,开发出靠谱的软件来。但是学了C语言的基本语法后,发现只能开发“黑底白字”的DOS程序,完全没有漂亮的界面和生动的交互。于是学数据结构,学算法,学操作系统,越陷越深,越来越难,最后迷茫了,不知道学C语言能做什么,认为学习编程很难,开始怀疑自己,甚至想放弃。在这里插入图片描述

其实,这是很多初学者都会踩到的一个坑!C语言本身是一门很简单的语言,提供的实用功能不多,大部分要借助操作系统、第三方库、单片机来完成。也就是说,只学C语言基本什么也做不了,也基本找不到工作。

C语言是一门通用性的语言,并没有针对某个领域进行优化,在实际项目中,C语言主要用于较底层的开发,例如:

Windows、Linux、Unix 等操作系统的内核90%以上都使用C语言开发;

开发硬件驱动,让硬件和操作系统连接起来,这样用户才能使用硬件、程序员才能控制硬件;

单片机和嵌入式属于软硬件的结合,有很多使用C语言的地方;

开发系统组件或服务,用于支撑上层应用;

编写PHP扩展,增强PHP的功能;

如果对软件某个模块(例如算法和搜索部分)的效率要求较高,也可以使用C语言来开发。

既然C语言的应用这么多,为什么很多读者觉得它什么也做不了呢?

我们先说一个概念,就是库(Library)。库就是编程专家写好的代码,我们可以拿来直接使用,这样能够节省开发成本,提高开发效率,并且库代码的执行效率、严谨性、安全性和规范性要明显优于我们自己编写的代码,市场上有很多优秀的库,有的收费,有的免费,我们要善于利用这些库,尽量不要重复造轮子。

库一般分为两种:

编程语言的开发者在开发编程语言的时候,一般都要预先写好常用的代码,或者说常用的功能,例如输入输出、数学计算、文件操作、网络操作、日期时间、错误处理、字符串处理等,这些由官方编写的库称为标准库(Standard Library),它们随编程语言一起发布,可以认识是编程语言的一部分。

有一些组织机构或者个人也会开发一些库,有的是为了盈利,有的是业余爱好,有的是本公司正在使用的代码,开源出来造福人类,这些库称为第三方库(Third-party Library)。

第三方库不是由官方开发,没有质量把控,良莠不齐,但是有相当一部分也非常优秀,已经得到了大家的认可,已经应用在大公司的项目开发中,这些库能够和标准库媲美。

标准库是我们在学习编程语言时就要一起学习的,例如C语言的输入输出、文件操作、日期时间、字符串处理、内存管理等都是标准库提供的功能,它们并不是C语言语法的内容。

如果一门编程语言的标准库强大,初学者经过简单的学习后就很容易开发出实用的项目。例如Java,它的标准库包含了GUI(图形界面)、图形处理、网络通信、网络服务器、HTML解析、HTTP协议、多线程、多进程、正则表达式、压缩文件、加密解密、数据校验、音频视频处理、数据库操作、XML操作等常用功能,初学者学了以后立马就能够开发网站、开发PC软件,感觉很实用,也感觉学到了东西。Python、C#、VB、PHP、JavaScript、Ruby 等都是非常实用的语言,学了就能做出东西来。

反观C语言,它的标准库只有输入输出、文件操作、日期时间、数学计算等基本功能,都是在黑黑的控制台下进行的,跟网站、PC软件、APP等八竿子打不着,所以初学者觉得C语言没有用。

那么,C语言到底能不能开发网站、PC软件或者APP呢?

C语言的标准库肯定不能干这些事情啦,就得依靠第三方库了,遗憾的是,C语言的第三方库大都也是底层库,支持应用开发的库寥寥无几,只有一个 GTK 库能够开发出 PC 软件来,而没有与网站开发和APP开发相关的库。
在这里插入图片描述
GTK 库在PC软件开发中也很少用了,PC软件开发已经是 C++、C#、VB、Java、Delphi 的天下了。换句话说,开发PC软件基本不使用C语言,而是使用 C++、C#、VB、Java、Delphi 等其它语言。

记住,C语言几乎不用来做软件、网站、APP等这些应用层开发,其它的编程语言能够更好地完成任务,没必要非得使用C语言,C语言基本都是用来做底层开发,也就是看不见摸不着的、在后台默默提供服务的那些项目,而这样的项目对初学者来说基本没有实用价值,初学者也不知道它们该怎么使用。

初学者想要的C语言没有,C语言能做的初学者用不到,就是这种矛盾导致初学者非常迷茫。如有小伙伴想学习C语言基础,可以进群731871503

进行交流学习,提升编程,共同进步

有人可能会问,C语言不是还可以用来开发单片机或者嵌入式吗?是的没错,但是这个方向是软硬件结合的,不是在我们的电脑上进行开发,而是在特殊的开发板上进行开发,并且还需要学习数字电路、模拟电路、汇编、ARM、Linux 等方面的知识,只学C语言也没有用武之地。

如果你觉得学了C语言没用,那么恭喜你,你是对的,应用层的开发一般真的用不上它。

但是,没用也要学,学习C语言并不一定是要应用它,C语言可以夯实你的编程基础,尤其是数据结构、算法、内存、线程、进程、通信、操作系统等底层的计算机知识,没有C语言基础是学不好的。

这些底层知识并不一定能够直接应用在实际开发中,但是它们会让你有底气,会让你透彻地理解编程概念,会让你站的“低”看得远,会让你避免很多低级错误,会让你心中有“架构师”的思维。不学C语言是码农,学了C语言是程序员。

初学者必须C语言开始吗?

建议从C语言开始,然后学习数据结构、算法、内存、线程、进程、通信、操作系统等基本的概念,它们是学习编程的基础,不管是应用层开发还是底层开发,这些知识都是必须的。

如果你非要跳过C语言,从其他语言开始,比如 Java、Python、PHP、JavaScript、C# 等,也不是不可以;但是,在学习的过程中你会有一种雾里看花、空中楼阁的感觉,很多东西只会用,却理解不了,深入不了,原因就是没有计算机基础,没学会走就想跑了,这个时候,还得老老实实回来学习C语言。

如何学习底层知识

关于数据结构、算法、内存、线程、进程、通信、操作系统等这些基本的知识,重要的是理解概念,知道计算机是怎么回事,千万不要深入细节,把自己绕进去,耽误一两年的功夫,要尽早跳出来去做应用开发,找到兴趣点,获得成就感。

这个时候,C语言主要的作用是让你入门,了解编程语言的基本语法,强化编程思维,学习计算机底层知识,为以后的职业生涯打下坚实的基础,而不是用它来做实际开发。

在实际开发中,遇到问题,或者哪里理解不透了,可以再来回顾这些底层知识,这个时候就可以深入细节了。因为有了实际开发经验,再学习底层知识就知道哪里是重点了,不会像无头的苍蝇一样乱飞,什么都学。

【拓展】C语言为什么没有应用层开发的库

C语言是一门“古老”的语言了,它只支持面向过程编程,不支持面向对象编程和泛型编程,在中大型的应用层项目开发中,C语言已经显得捉襟见肘了,C++、Java、Python、C# 等其他编程语言能够更好地胜任,为C语言开发应用层的库简直是费力不讨好,所以几乎没人这么做。

GTK 算是一个应用层的库,但是它也比较老了,新版的 GTK+ 已经支持 C++ 了,不再仅仅支持C语言了。

我们先不管面向过程、面向对象、泛型这些晦涩的编程概念,简单地理解就是,C语言支持的特性少,用起来费劲,开发效率低,而 C++、Java、Python、C# 等支持的特性多,用起来方便,开发效率高。在这里插入图片描述

C语言的优势是运行效率极高,这正是底层开发所看重的。底层开发有时候就是一个模块,或者是一个服务,规模不算大,但是对效率有严格的要求,此时用C语言就非常合适,所以针对底层开发的C语言库较多,因为它们有非常大的实用价值。如有小伙伴想学习C语言基础,可以进群731871503

进行交流学习,提升编程,共同进步

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/504087.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手动卸载_一种手动液压一体式卸载扳手

摘要一种手动液压一体式卸载扳手,属于煤矿井下施工设备领域,可解决井下回收单体柱时存在的安全隐患的问题,包括扳手腔体、柱塞、堵头和加长把手,扳手腔体包括半圆柱体Ⅰ以及与半圆柱体Ⅰ连接的半圆柱体Ⅱ,所述半圆柱体…

docker运行jenkins挂掉_【图文】Jenkins教程集成SonarQube

什么是SonarQube?看看维基百科的说明:SonarQube与CI/CD架构图SonarQube与CI/CD架构图Docker运行SonarQube简单了解之后,开始安装SonarQube.这里用Docker安装注:这里用mysql来存储SonarQube的数据,SonarQube7.9起已经不在支持mysq…

python写选择排序_如何快速掌握python选择排序算法?

对于算法,我们不少讲述,但是大部分小伙伴都希望,将单个算法拆分讲解,这样可以更加深对算法的印象,好了,本期,就针对选择排序算法,给大家讲解说明哦~感兴趣的小伙伴一起来看下吧~ 在列…

实现if_数组实现固定栈和队列+栈与队列相互实现

文章目录一、数组实现固定栈和队列1.数组实现固定栈2.数组实现固定队列二、栈与队列相互实现1.两个队列实现栈2.两个栈实现队列一、数组实现固定栈和队列1.数组实现固定栈代码如下:class ArrayStack { private:int *arr;int index; public:ArrayStack(int initSize)…

友情提示,你该找一份假期实习啦!

假期已至, 这么漫长的寒假, 你是否有找一份实习的打算呢? 是否毫无头绪和思路? 是找一份毫无意义的推销工作,传单,快餐店,电话推销等,还是真正找到兴趣所在,专业相关&…

什么意思_invalid是什么意思

invalid是什么意思in,常见的表示反义的前缀,更多例子比如:indifferent, infinite, incapable, etc. valid,形容词,有根据的、让人信服的、有效的、有法律效力的。相关的单词我们还背过validity.validinvalid&#xff0…

互联网技术+非技术书单资源分享,都给泥萌!

为了更好的帮助到大家,从讨论区去找到对应的分享给大家 欢迎留言你想要的书资源,并说明理由(比如为什么想看这本书之类的),这边有的话都会汇总~~ 深入理解java虚拟机 链接: https://pan.baidu.com/s/1wXGZnMiDKd6AKS…

createprocess失败代码2_pytest文档57单元测试代码覆盖率(pytestcov)

前言我们在做测试的时候,经常遇到领导的灵魂拷问:你的测试用例覆盖率是多少,达到100%了么?你如何保证你的测试质量?测试用例的覆盖率如何统计呢,如何知道开发的代码,我们都测到了,不…

java包名和类名可以一样吗_Java入门第三课:Java基本语法

Java基础编写Java程序时,应注意以下几点:1.大小写敏感:Java是大小写敏感的,这就意味着标识符Hello与hello是不同的。有些操作系统不区分大小写,不区分的话,文件名是不完全正确的。 然而,如果你的…

C语言入门精髓

上篇说到了C语言还是很基础的编程语言,还是值得去学,那么怎么去学?什么人才能学好?为什么学到一半就早早缴械投降了?众多迷雾,众多的困难,怎么破局? 如有小伙伴想学习C语言基础&…

python 取余_玩转Python源码(一) quot;%squot;与“%d”

某一天吹水的时候,吹着吹着就吹到了一下这么一个案例。import timeitdef a():"%s, %s" % (1, 2)def b():"%s, %d" % (1, 2)def c():"%d, %d" % (1, 2)t timeit.timeit(stmt"a()", setup"from __main__ import a&quo…

笔刷怎么做_原来是这样:用PS笔刷做出颜料肌理效果!

题图插画 | TX灼灼“当我意识到可以利用PS的某些工具,设置不同的画笔之后,一切都变了。有些看起来很不合逻辑的组合,最后产生的效果却是逼真的惊人,再结合合适的形状就能创作出特别又新奇的东西。”——自制笔刷收入超10万美元的插…

qt 3d迷宫游戏_机械迷宫—一款机械风格的3D立体解谜独立游戏

解谜游戏一直是游戏类别中的一个大类,这里面各式各样的解密游戏,多不胜数。解密游戏又分很多种类,比如动作冒险新式的解密游戏,文字图像类型的解密游戏;游戏制作上有大有小,但是都有一个共同特点&#xff0…

Ubuntu下的Linux内核的编译及安装

推荐群:C/C大学技术协会:145655849 Linux中的模块(Modules) Linux的module其实可以看作是内核的插件。 在Linux系统中,可以通过文件 cat /proc/modules xxxxxxxxxx1 1cat /proc/modules 查看相关的驱动模块。 也可以通过命令 l…

执行公式_一学就会,一吃就瘦,超简单又好执行的减肥食谱公式!

对于很多人来说,没有精确计算食物重量的条件,无法每天花费大量的时间精力去自己准备健康的食物,给大家一个不需要食物称,只要在日常饮食基础上看看自己的手掌就能通过类比来选择好食物的种类和合适比例的方法!碳水化合…

apollo源码分析 感知_Kitty中的动态线程池支持Nacos,Apollo多配置中心了

目录回顾昨日nacos 集成Spring Cloud Alibaba 方式Nacos Spring Boot 方式Apollo 集成自研配置中心对接无配置中心对接实现源码分析兼容 Apollo 和 Nacos NoClassDefFoundErrorApollo 自动刷新问题回顾昨日上篇文章 《一时技痒,撸了个动态线程池,源码放 …

c语言 把字符串转换为变量名_如何将抓取下来的unicode字符串转换为中文

如果抓取的数据是json数据,那么直接将抓取的数据用json格式输出出来就行了。如下:response requests.get(url, headersself.headers).json()如果是unicode字符串,那么请继续往下看大家有没有遇见抓取下来的数据是unicode字符串的?如下图所示…

c++ 读取访问权限冲突_Linux系统利用可执行文件的Capabilities实现权限提升

一、操作目的和应用场景Capabilities机制是在Linux内核2.2之后引入的,原理很简单,就是将之前与超级用户root(UID0)关联的特权细分为不同的功能组,Capabilites作为线程(Linux并不真正区分进程和线程)的属性存在,每个功能组都可以独…

Python 数据分析 Matplotlib篇 时间序列数据绘制折线图(第4讲)

Python 数据分析 Matplotlib篇 时间序列数据绘制折线图(第4讲)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹…

家装强电弱电布线图_家装水电施工标准(图文版),装修小白一眼也能看懂。...

如果把家比喻成一个人,房子是骨骼,那么水电路则相当于人体的血管和动脉,正因为他们的存在,才赋予家鲜活的生命。由此,水电施工自然也成为家装工程的重中之重。水电走线原则※ 水电弹线放样施工,使用切割机开…