开启C语言之路

简介: C语言介绍C语言的演变过程C语言的优点C语言的缺点为什么要使用 C?1.系统软件开发2.应用软件开发C语言的重要性C11新特性C语言学习技巧学习C语言的方法确立自己的学习目标学习C语言需要前提条件吗从一个程序走进C语言

C语言介绍


       说到C语言就得说说盘古开天辟地那点事了。盘古开了天,C语言就在开天后的很多年出现在了人们的面前,给人们带来了新的生活方式。


C语言的演变过程


       UNIX 系统是世界上第一个真正的操作系统。由于 UNIX 操作系统是用C语言编写的,而这个系统很流行,于是C语言也跟着流行起来。而 UNIX 操作系统是开源的,所以别人要想学习,就要先学C语言。


       B语言被C语言改写后,C语言流行了而B语言就被淘汰了。而且后来发现,C语言的确非常好,它是面向过程语言的代表,是有史以来最重要的一门计算机语言。


       随后又出现了 C++。C++ 是本贾尼·斯特劳斯特卢普(Bjarne Stroustrup)编写的,他也来自贝尔实验室,是C语言创始人丹尼斯·里奇的下属。C++ 就是在C语言的基础上发明的。C++ 进一步扩充和完善了C语言,是一种面向对象的程序设计语言。


       后来 Sun 公司又对 C++ 进行改写,产生了 Java。而微软公司发现 Java 很流行,就造出了一个类似的语言——C#。所以 Java 和 C# 都源自于 C++。


       从这个过程我们可以看出,如果以后要学习C++、Java或者C#的话,那么C语言就必须要学!因为它们都源自于C语言。而且C语言中绝大部分的知识,在C++、Java、C#中几乎都会用到。C语言里面有两个知识点是必须要学的,一个是函数,另一个是指针。这两个知识点是整个C语言的主体和核心。而且这两个知识点在其他语言中是学不到的,或者是同C语言中有差别。总之,C语言是它们的“老祖宗”,学习其他语言之前最好要将C语言学好。


C语言的优点


C语言的优点有三个:


  1. 代码量小。


  1. 运行速度快。


  1. 功能强大。


       我们先看第一个优点,C语言的代码量很小,这是什么意思呢?也就是说如果你要完成同样一个功能,用C语言编写出来的程序的容量是很小的,而用其他语言编写容量就会比较大。比如Microsoft Word和WPS,它们同样都是办公软件,功能也差不多,但WPS的安装文件只有50MB左右,而Microsoft Word的安装文件超过500MB,有的甚至接近1GB。原因就是WPS的内核是用C语言编写的。


       C语言的第二和第三个优点是它的运行速度比较快和功能强大,我们可以通过一个例子来解释。世界上总共有三大操作系统:UNIX操作系统是用纯C语言编写的;Windows操作系统的内核也是用C语言编写的; Linux操作系统仍是用纯C语言编写的。


       这三大操作系统的内核全部都是用C语言编写的。为什么用C编写,因为C语言的速度最快。计算机中所有的软件都是在操作系统上运行的,如果操作系统的速度很慢,那么在它基础上运行的软件的速度就更慢了。


       所以操作系统很重要,所有的硬件全部都是由操作系统控制的。而这么重要的东西只能用C语言来写,所以C语言很重要。为什么只能用C语言写?第一,C语言速度够快;第二,C语言可以访问硬件,所以它够强大。为什么不能用Java写?首先,Java太慢了;其次,Java语言没有指针。没有指针就不能访问硬件,所以它的功能是不够的。什么是指针以后再议,它是C语言中非常重要的内容。


C语言的缺点


       任何语言有优点就有缺点。C语言的缺点可以用下面三点来概括:


  1. 危险性高。


  1. 开发周期长。


  1. 可移植性不强。


       咱们呢先看第一点。假如你写同样一个程序,在Java里面会报错,而在C语言里面是不会报错的。为什么?因为C语言设计的思想是:你想怎么写程序就怎么写,只要你的这种写法错得不是很离谱,就认为你这么写有特殊的含义,可以通过。


       大家想想这样导致的结果是什么?因为有歧义的程序也可以通过,这样就会有很多漏洞,黑客往往会抓住这些漏洞进行攻击。所以说C语言比较危险。这也是为什么C语言比较难学的原因,因为你学完之后编写一个程序很可能就是错的,但又很难发现。所以前面说C++从安全性上对C语言进行了升级。


       第二个是它的开发周期比较长。因为C语言是面向过程的语言,面向过程语言的一个特点就是写大项目的时候很容易“崩溃”。当代码上到10万行的时候很容易崩溃,会出现各种各样莫名其妙的错误。这时候就需要用另外一种思想将整个程序的框架重新设计一下,即用面向对象的思想设计。这也是C语言现在没有Java流行的原因。


       C语言的第三个缺点是可移植性不强。这个主要是针对Java的。Java的可移植性太强了,所以就显得C语言的可移植性不强。什么叫可移植性?就是说Java程序在哪个机器上都可以运行,而且结果一模一样。而C语言就不行,C程序在其他机器上不一定能运行。而且就算能运行,结果可能也不一样。


为什么要使用 C?


       C 语言最初是用于系统开发工作,特别是组成操作系统的程序。由于 C 语言所产生的代码运行速度与汇编语言编写的代码运行速度几乎一样,所以采用 C 语言作为系统开发语言。下面列举几个使用 C 的实例:


1.系统软件开发


  1. 操作系统:UNIX、Windows、Linux。
  2. 驱动程序:比如主板驱动、显卡驱动、摄像头驱动。驱动一般是用C语言和汇编语言写的,C++在这方面稍弱。
  3. 数据库:SQL server、Oracle、MySQL、DB2。


2.应用软件开发


  1. 办公软件:WPS。


  1. 图形图像多媒体: Photoshop、Mediaplayer。


  1. 嵌入式软件开发:嵌入式软件开发说得简单点就是芯片编程,单片机和ARM上进行的开发都属于嵌入式软件开发。


  1. 游戏开发:2D、3D游戏。CS整个游戏的引擎全部是用纯C写的。


C语言的重要性


       其实前面已经讲了很多C语言的重要性,下面来总结一下。


  1. C语言是计算机界公认的有史以来最重要的语言。


  1. C语言是所有大学工科和理科学生必修的课程。


  1. UNIX、Windows、Linux都是用C语言开发的。


  1. C语言是任何一个想终身从事程序设计和开发的人员必须要熟练掌握的语言之


  1. C语言是大企业、外企招聘程序员必考的语言。


  1. 学习C语言可以为学习C++、Java、C#奠定基础。C++、Java、C#都源自C语言,C语言大部分的语法、知识都被移植到C++、Java和C#中了。所以学习C语言有助于C++、Java和C#的学习。对于学习编程的人来说,有深厚的C语言功底是极其重要的。只要C语言的功底深厚,那么学习其他语言都会很简单。但深厚的功底不是一天两天造就的,需要长时间的积累和沉淀!


C11


       C11(也被称为C1X)指ISO标准ISO/IEC 9899:2011,是当前最新的C语言标准。在它之前的C语言标准为C99。


新特性


  1. 对齐处理(Alignment)的标准化(包括_Alignas标志符,alignof运算符,aligned_alloc函数以及头文件)。


  1. _Noreturn 函数标记,类似于 gcc 的 __attribute__((noreturn))。


  1. _Generic 关键字。


  1. 多线程(Multithreading)支持,包括:_Thread_local存储类型标识符,头文件,里面包含了线程的创建和管理函数。_Atomic类型修饰符和头文件。


  1. 增强的Unicode的支持。基于C Unicode技术报告ISO/IEC TR 19769:2004,增强了对Unicode的支持。包括为UTF-16/UTF-32编码增加了char16_t和char32_t数据类型,提供了包含unicode字符串转换函数的头文件。


  1. 删除了gets()函数,使用一个新的更安全的函数gets_s()替代。


  1. 增加了边界检查函数接口,定义了新的安全的函数,例如fopen_s(),strcat_s()等等。


  1. 增加了更多浮点处理宏(宏)。


  1. 匿名结构体/联合体支持。这个在gcc早已存在,C11将其引入标准。


  1. 静态断言(Static assertions),_Static_assert(),在解释 #if 和 #error 之后被处理。


  1. 新的 fopen() 模式,("…x")。类似 POSIX 中的 O_CREAT|O_EXCL,在文件锁中比较常用。


  1. 新增 quick_exit() 函数作为第三种终止程序的方式。当 exit()失败时可以做最少的清理工作。


C语言学习技巧


学习C语言的方法


       首先大家要明白学习无捷径!但是学习是有方法的。


       那么学习C语言有什么好的方法呢?根据我自己多年的总结,以及很多编程前辈的经验,主要有以下几个方面:


       分清主次。学习C语言最忌讳的就是不分主次,这是绝大多数学习C语言的同学都会犯的错误!我们刚开始学习的时候只需要将那些最重要的、最核心的学会就已经很好了!先将最精髓的东西提炼出来,再将整个C语言学一遍,从全局上把握C语言。对于那些次要的,有需要再学,没有需要也可以不学。


       一定要多上机,多“敲"代码。编程是一门实践性的学科,绝对不是理论。如果不动手“敲"代码的话,永远都学不会编程。很多问题只有在“敲代码”的时候才能发现,才会有更加深刻的体会、领悟和理解。而不是靠死记硬背书中的注意点,那样真的很痛苦。我在学习编程的时候从来都不会刻意记忆什么注意点,这些知识点都是在不停“敲代码”的过程中,自然而然地融入我的身体中的。


       你们一定要记住:“程序是写出来的,不是看书看出来的!”


       要学会记笔记。编程需要不断地积累。我们一定要学会模仿别人优秀的代码、优秀的算法,然后将它记下来。一定要站在巨人的肩膀上学习。但是我们的记忆能力是有限的,时间长了难免会遗忘,所以一定要学会记笔记。一有心得、体会、感悟就写下来,这些都是很珍贵的。我们在记笔记的时候,如果眼前没有计算机则可以先写在纸上,但事后一定要将它整理成电子版。整理成电子版看起来会很方便、舒适,还可以随意地增添和删改,保存时间也长。


确立自己的学习目标


       了解C语言的演变过程,知道C语言是怎么来的;了解C和C++、Java、C#之间的关系和区别;了解C语言的应用领域和重要性。通过了解这些内容知道自己为什么要学习C语言。


  1. 熟练掌握C语言的语法规则。因为无论是C++、Java还是C#,这些当前非常流行的语言的语法都与C语言类似。但是再次强调,一定要分清主次,不要一次性什么都学,你没有那么多耐性和精力。我们只要掌握最主要、最常用的就行了。


  1. 掌握简单的算法。算法就是解题的方法和步骤,编程总得有一个思路,这个思路就是算法。


  1. 能看懂程序。


  1. 会调试程序。


  1. 掌握将大问题转化为一系列小问题来解决的思想。


学习C语言需要前提条件吗


       很多学过C语言的人都知道,C语言这门课很难。那么没有学过计算机专业课程能不能将C语言学好呢?首先肯定是能学好的,因为很明显C语言不是只有计算机专业的学生才学的,所以它没有门槛。


       这32个单词就是C语言的关键字(由系统定义,不能重作其他定义)是必须要记住的。


       int、float、double、char、short、long、signed、unsigned、if、else、switch、case、default、for、while、do、break、continue、return、void、const、sizeof、struct、typedef、static、extern、auto、register、enum、goto、union、volatile。


       这32个关键字到后面大多数都会讲,除了最后的enum、goto、union和volatile。因为这四个几乎不用,所以不讲,你们也不用看。所以就剩28个了,记忆28个英文单词应该也不是什么难事!


从一个程序走进C语言


       本章先给大家编写一个程序。编写这个程序的目的是让大家对编程有一个基本的了解,通过这个程序让大家了解什么是编程、怎么编程。


微信图片_20220520143610.png


  看图说话,其实有时候很多文字表达远不如一张图来的明了,一目了然。以后的内容能用图咱就尽量不叨叨,有些图描述不清楚下面也会有详解有感兴趣的可以看看。

       咱搞一个实例来实践一下,学习代码还是实践为主,要不学了理论一会就忘记了:


#include <stdio.h>
int x;
int main()
{
    x=520;
   /* 我的第一个 C 程序 */
   printf("Hello, 帅次! %d",x);
   return 0;
}


由于我没有搭建开发环境,使用的是 在线编译


       运行结果:Hello, 帅次! 520


接下来咱们聊聊上面这段程序:


       第一行#include 是预处理器指令,告诉C编译器在实际编译之前要包含stdio.h文件。


       下一行int x是变量,函数外声明变x。声明,也是定义


       下一行 int main()是主函数,程序从这里开始执行。


       下一行 x=520是对变量x进行赋值


       下一行 /*...*/ 将会被编译器忽略,这里放置程序的注释内容。它们被称为程序的注释


       下一行 printf(...)是C中另一个可用的函数,会在屏幕上显示消息 "Hello, 帅次! 520"。


       下一行 return 0; 终止main()函数,并返回值0。


       基本上一个简单吃C程序就是这样的,真正到项目中肯定没有这么简单,当然大家也不用担心,后面咱要学习的东西很多,慢慢充实自己,这个程序也会越来越多样化。


相关文章
|
6月前
|
程序员 C语言
C语言--调试技巧(下)
C语言--调试技巧(下)
|
3月前
|
C语言
C语言实例
【1月更文挑战第17天】C语言实例。
25 0
|
3月前
|
C语言
C语言实例练习
【1月更文挑战第18天】C语言实例练习。
12 0
|
7月前
|
C语言
C语言内存管理技巧与注意事项
在C语言中,内存管理是一个至关重要的方面。良好的内存管理能够提高程序的性能和稳定性,避免内存泄漏和悬挂指针等问题。本篇博客将介绍一些C语言中常用的内存管理技巧和注意事项。
97 0
|
7月前
|
C语言
一个风骚的C语言操作
一个风骚的C语言操作
|
8月前
|
C语言
C语言基础--函数
C语言基础--函数
31 0
|
10月前
|
程序员 编译器 C语言
|
10月前
|
程序员 C语言
|
11月前
|
存储 数据库 C语言
如何使用 “C语言” 对文件进行操作?
前言 文件操作 在运行程序的时候,此时数据是存放在内存中,当程序退出的时候,程序中的数据自然就不存在了,等下次运行程序的时候,数据又得重新录入,我们可以用文件的办法,把程序中的数据保存下来,只有我们自己选择删除数据的时候,数据才不复存在。 这就涉及到了数据持久化的问题,我们一般数据持久化的方法有,把数据存放在磁盘文件、存放到数据库等方式。 文件指针: 向文件里输出或读取数据需要使用文件指针的形式,每个文件指针可以用来打开一个文件,这个文件指针指向文件的文件信息区。 FILE * 变量名 🌞
|
存储 人工智能 安全
C语言高级教程-C语言数组(三)
C语言高级教程-C语言数组(三)
C语言高级教程-C语言数组(三)