目录
目录
前言
关于C语言的起源及优劣,内容均来自《C primer Plus》,较为枯燥,若是没有兴趣,可以直接略过
一、C语言的起源及优劣
1 - C语言的起源
1972年,贝尔实验室的丹尼斯·里奇和肯·汤普逊在开发UNIX操作系统时设计了C语言。然而,C语言不完全是里奇突发奇想而来,他是在B语言(汤普逊发明)的基础上进行设计。至于B语言的起源,那是另一个故事。C语言设计的初衷是将其作为程序员使用的一种编程工具,因此,其主要目标是成为有用的语言。
虽然绝大多数语言都以实用为目标,但是通常也会考虑其他方面。例如,Pascal 的主要目标是为更好地学习编程原理提供扎实的基础;而 BASIC的主要目标是开发出类似英文的语言,让不熟悉计算机的学生轻松学习编程。这些目标固然很重要,但是随着计算机的迅猛发展,它们已经不是主流语言。然而,最初为程序员设计开发的C语言,现在已成为首选的编程语言之一。
2 - C语言的优劣
优势
- 设计特性:相比于汇编语言和其他高级编程语言(c#、java),用C语言编写的程序更加容易理解。
- 高效性:由于C语言更加接近硬件,具有汇编语言才具有的微调控制能力,可以根据具体情况微调程序,以获得最大运行速度或最有效地使用内存。
- 可移植性:由于C语言与UNIX关系密切,UNIX系统通常会将c编译器作为软件包的一部分,安装Linux时,通常也会安装c编译器。故无论是家用计算机、专业工作站还是大型机,都能找到针对性的c编译器。
- 强大而灵活:C语言功能强大且灵活。例如,功能强大且灵活的UNIX 操作系统,大部分是用C语言写的;其他语言(如,Python、Pascal、Logo、 BASIC)的许多编译器和解释器都是用C语言编写的。因此,在UNIX机上使用FORTRAN时,最终是由C程序生成最屏的可执行程序。C程序可以用于解决物理学和工程学的问题,甚至可用于制作电影的动画特效。
缺点
人无完人,金无足赤。C语言也有一些缺点。例如,C语言使用指针,而涉及指针的编程错误往往难以察觉。有句话说的好:想拥有自由就必须时刻保持警惕。
C 语言紧凑简洁,结合了大量的运算符。正因如此,我们也可以编写出让人极其费解的代码。
说明:关于C语言的起源及优劣的1、2小节内容,大部分——摘自《C primer Plus》
二、C语言概述
1 - C语言程序的结构
函数头
书写头文件
函数体
主函数
{
语句
return 0;
}
C语言程序是由一个或多个函数组成,其中必须包含main(主函数)
如你所见,一个基本的C语言程序,包含函数头与函数体,其中:
1-1 函数头与头文件
函数头:一般书写头文件。
头文件:所谓头文件,顾名思义,就是放在前头的文件,在正式程序开始运行之前就要执行的内容。
为什么头文件在程序运行之前就要处理呢?
这是因为,c语言的编译者们,编译了许多预先写好的程序,并将它们集合在c库之中,让C语言的使用者更方便地进行程序的编写。下面,我举一个例子,让大家更好地了解c库的便捷性。
例如,我们要写一个把用户输入的内容打印出来的程序,仔细想一想,我们要让程序完成以下任务:
- 让程序开辟一块内存空间,令用户得以输入信息;
- 接收用户输入的内容,将其存入内存之中;
- 将用户输入的内容打印在屏幕上;
怎么样,这些常用的功能,用代码完成起来却很是麻烦,就算你觉得这很简单,但每次使用都用十几行乃至几十行代码来实现该功能,是否有些冗余呢?
这时候,c库的作用就显现出来了,我们只需要调用c库中现成的程序(c语言中称函数)——printf和scanf即可。如下图,简单三条语句即可成。
int main(void) { int a = 0;//初始化变量 scanf("%d",&a);//接收用户输入的内容 printf("%d",a)//把用户输入的内容在屏幕上打印出来 return 0; }
怎么样,现在明白c库的便捷之处了吧?那么就让我们回归正题……
c库如此便捷,那么我们该如何访问c库呢?
很简单,使用头文件即可。
那么,关于“为什么头文件在程序运行之前就要处理”这个问题,答案也显而易见了,是因为,编译器需要通过不同的头文件,访问不同的c库,只有在程序运行之前预先处理头文件,我们才可以在代码中使用相应的函数。
不同的头文件中,包含不同的库函数,该图片截自C 标准库头文件 - cppreference.com
感兴趣的朋友可以去看看。
那么,如何使用头文件呢?
使用头文件,就要用到预处理指令 —— #include
预处理,顾名思义,就是预先处理,程序在正式运行之前,会对源代码进行一些准备工作,即——预处理。至于其具体运行逻辑,暂时不必知晓(因为我也不知道),大家只用知道,需要使用什么头文件,在程序之前加上 —— #include<头文件>即可。
1 - 2 函数体
在第二节开头的图片中,我们看到,函数体中有 主函数、语句、return 0、{}。这就是一个函数体的主要组成部分,接下来,我将分别讲述它们。
主函数(main)
“main”,这个名字看起来很普通,实际上的确如此,但这也是唯一的选择。为什么这么说?
因为,C语言程序,一定要从main()开始执行。就像它的名字一样,它是程序的主体函数,无论今后定义多少个函数,主函数main也是程序中必不可少的,缺失main()函数,相当于程序没有门户,完全封闭,那么不论代码多么华丽、巧妙,都将失去意义。
main()函数的用法
int main(void) { }
如图所示,main()函数的用法就这么简单,其前面橙色的 int,表示的其实是main()函数的返回类型,具体的本篇暂时不提,大家只需要知道 —— 要使用main()函数,就要在其前面加上 int 。
关于main后面的括号,其实也很好理解。打一个不恰当的比方:我们想要进行加法运算,必须要用到两个加数。那么对于需要进行一定任务的函数来说,同样需要多个数据,此处的 void ,实际上指的是“空”“没有”,也就是说,我们没有为它提供任何数据,所以,void 在C9标准下可以忽略不写,但在C99、C11标准下,不可忽略,所以,为了防止程序出错,最好不要丢掉 void。
这时候,又有眼尖的朋友发现了,“int main(void)”后面跟着一个花括号,它又有什么作用呢?
花括号 — {}
很简单,花括号代表一个整体,跟在主函数后面,表示花括号内的语句,全部是属于主函数的。
- 一般而言,所有C程序都用 {} 表示函数体的开始和结束,这是规定,不能省略。
- 花括号“{}”还可以把函数中的多条语句合成一个单元,如:
int main()
{
int input = 0;
int a = 0;
if(input==0)
{
while(a==0)
printf("hello world!");
}
return 0;
}
如图,if之后跟着的花括号,把while和printf两条语句合并在一个单元。
语句
语句是程序的基本构建块,用于执行操作或控制程序流程
C语言一般有这几种语句:
至于现在,你只需要知道:语句是用来实现程序任务的工具,它们遵循一定的语法结构,违反语法结构,将会令程序功能缺失甚至程序崩溃。
return 0;
"return 0;"实际上是return语句,return语句执行的是:把一个值返回到函数的入口。
例如,此处的return 0,是指把整数0返回到main(),由于在程序中,0代表false(假),非0代表ture(真)。但,电脑程序以二进制为基础,故非0,只能是1。
- 返回0:表示程序成功执行,没有错误。这是最常见的返回值,通常用于程序正常结束的情况。
- 返回非0值:表示程序执行过程中遇到了错误或异常情况。具体的非0值可以表示不同类型的错误,但这通常由程序自己定义。
………………………………………………………………………………………………………………
结语
本来想把数据类型、占位符、基本操作符什么的都写下来的,但是……太多了!暂时就这样吧,就当是把学过的知识再总结梳理一下了,其他的只能等到下次再写了……