学好C语言,学习其他开发语言就比较容易
C语言作为计算机专业的第一门课,最主要的是通过C语言来入门,打基础,是非常值得好好去学习的一门课,基础打好了以后学习其他技术也更容易。
高级语言的语法基本相似
一门开发语言当中,基本的数据类型(int float, string,char,boolean,array),变量的声明,加减乘除算术运算,与或非等逻辑运算、大于等于小于等关系运算,赋值语句,分支选择语句(if/else),循环语句(for, while),函数的声明及调用,文件操作等基本都是类似的。
比如C语言的if/else, for循环,while循环等在其他常见的开发语言比如java, c++, js, php等开发语言当中也同样有;C语言的数组下标是从0开始的,java,c++,js等开发语言数组的下标也是从0开始的。这些语法基本都是类似的。
库函数/STL/JDK
C语言标准中有语言标准的库函数供开发者调用,C++标准中也有STL库,Java官方也为开发这提供了JDK工开发者调用等等,这些理念都是类似的。
机器语言生汇编,汇编语言生C,C生万物。
掌握了计算机的工作原理和C语言,就打好了一个坚实的基础,以后学习其他的开发语言和技术就比较快。
C语言的优缺点
在我们系统学习C语言的具体的语法之前,我们首先从整体看看C语言有什么优缺点,然后再学习具体的语法,更容易学习。
C语言的优点有:
底层编程:C语言允许直接访问计算机硬件,提供了底层编程的能力。程序员可以直接控制内存、指针和位操作等,这在开发操作系统、驱动程序和嵌入式系统等领域非常有用
程序执行效率高:C语言生成的机器代码执行效率较高,能够产生紧凑且高效的代码。它不依赖于虚拟机或解释器,直接编译为机器码执行
可移植性好:C语言的可移植性通常较好。标准的C语言库在各种平台上都有广泛的支持,可以编写一次代码,然后在不同的操作系统和硬件平台上进行编译和运行。尽管仍然需要针对不同平台进行一些调整,但相比其他低级语言而言,C语言更容易实现跨平台开发
C语言的缺点
事物通常都具有两面性,有的时候它的优点同样也是它的缺点,想要使用C语言的自由编程的乐趣,就必须承担更多的责任。
C语言使用指针,而涉及指针的编程错误往往难以察觉。使用指针时,有可能出现空指针解引用、内存泄漏、野指针等问题。这些指针错误可能导致程序崩溃或产生未定义的行为
C语言为了保证简洁和高效的执行缺少必要的安全检查,比如数组越界检查,缓冲区溢出检查,输入验证等。容易引发程序运行异常和安全问题。所以后来的编程语言比如Java,C#等都对数组越界等做了检查。
// demo1 缺少数组越界检查,当数组越界后,程序出现预料之外的不确定行为
int a [] = {1,2,3};
printf("%d", a[3]);
// demo2 缺少缓冲区溢出校验
// 字符数组S预留了10各字节的空间,当输入的字符超过10个的时候,程序
// 不会报错,而是把超过部分的字符继续顺着内存地址写入,导致,后边的数据异常被擦除
char s [10];
gets(s);
printf("%s",s);
因此,C语言对程序员的要求相对C++,java等更高。
C语言的应用场景
系统级软件的开发
C语言被广泛用于编写操作系统、编译器、驱动程序和嵌入式系统等系统级软件。它提供了对硬件和底层系统资源的直接访问能力,使得开发人员可以更好地控制系统的行为和性能。比如Window,Linux, 数据库软件MySQL,网络协议栈的实现软件等。系统级软件的开发门槛比较高,需要对硬件,操作系统等知识有比较深入的了解,不太适合应届生就业工作
游戏开发
C语言可以用于游戏引擎的开发,图像处理,音视频处理等领域。在一些中大型游戏中,游戏环境渲染,图像处理等都使用C语言处理。OpenGL(Open Graphics Library)就是用C编写的。常用的游戏引擎,诸如 Unity3D、Unreal Engine、Cocos2dx 等都是使用 C 语言编写的。是个不错的就业方向
嵌入式开发
智能手表,电视,冰箱,扫地机器人等使用微处理器的设备上的软件开发,由于资源有限需要优化内存和性能,因此,C语言在该领域的应用开发比较流行。嵌入式的操作系统FreeRtos,UCOS等都主要由C语言开发。是不错的就业方向
网络编程
C语言提供了丰富的网络编程库,如Socket库,使得开发网络应用程序变得更加容易。许多网络服务器、客户端和协议的实现都是使用C语言完成的。
C语言的规范
一门语言的语法是一套规则,用于管理语言中各有效语句组合在一起的方式。C语言发展之初,并没有所谓的C标准。随着微型计算机的普及,C语言衍生出了诸多版本,这些版本之间存在差异,为了使C语言得到统一,美国国家标准学会(ANSI)制定了一套标准,称为ANSI C。ANSI C标准自1989年诞生以来,又历经了数次修改。
C89/C90
美国国家标准协会(ANSI)于1983年组建了一个委员会(X3J11),开发了一套新标准,并于1989年正式公布。该标准(ANSI C)定义了C语言和C标准库。国际标准化组织于1990年采用了这套C标准(ISO C)。ISO C和ANSI C是完全相同的标准。ANSI/ISO标准的最终版本通常叫作C89,其主要内容如下:
- 定义了 C 语法标准及标准库;
- 新的预处理命令和特性;
- 函数原型(prototype);
- 新关键字:const、volatile、signed;
- 宽字符、宽字符串和多字节字符;
C99标准
1994年,ANSI/ISO联合委员会(C9X委员会)开始修订C标准,最终发布了C99标准。该委员会遵循了最初C90标准的原则,包括保持语言的精练简单。委员会的用意不是在C语言中添加新特性,而是为了达到新的目标。
第1个目标是,支持国际化编程。例如,提供多种方法处理国际字符集。
第2个目标是,“调整现有实践致力于解决明显的缺陷”。因此,在遇到需要将C移至64位处理器时,委员会根据现实生活中处理问题的经验来添加标准。
第3个目标是,为适应科学和工程项目中的关键数值计算,提高C的适应性,让C比FORTRAN更有竞争力。
为了实现上述的目标,C99标准纳入了如下的主要内容:
- 复数(complex);
- 整数(integer)类型扩展;
- 变长数组;
- Boolean 类型;
- 非英语字符集的更好支持;
- 浮点类型的更好支持;
- 提供全部类型的数学函数;
- C++ 风格注释(//)
C11标准
2011年终于发布了C11标准。此次,委员会提出了一些新的指导原则。出于对当前编程安全的担忧,不那么强调“信任程序员”目标了。修订标准的原因不是因为原标准不能用,而是需要跟进新的技术。例如,新标准添加了可选项支持当前使用多处理器的计算机
C11 标准新引入的特征尽管没 C99 相对 C90 引入的那么多,但是这些也都十分有用,比如:字节对齐说明符、泛型机制(generic selection)、对多线程的支持、静态断言、原子操作以及对 Unicode 的支持。