C语言第一章:为什么要学习C语言
第一节:C语言基本知识了解
首先了解一下语言的分类:
- 机器语言,就是0和1组成的语言
- 汇编语言,通过ADD,AX,BX等指令运算的语言
- 高级语言:结构化语言->C语言,面向对象语言->C++,Java等
C语言的发展过程:
- C语言的产生是由贝尔实验室,为了改造Unix系统而产生的,由于当时用B语言开发的,有许多漏洞,所以发明了C语言
- 1983年,美国标准委员会对C语言制定了ANSI C标准
- 1987年,美国标准委员会对C语言制定了ANSI C87标准
- 1999年,美国标准委员会对C语言制定了ANSI C99标准
C语言的特点:
- 优点:代码执行速度快,功能强大
- 缺点:开发周期长,不安全
C语言的32个关键字:
auto | break | case | char |
const | continue | default | do |
double | else | enum | extern |
float | for | goto | if |
int | long | register | return |
short | signed | sizeof | static |
struct | switch | typedef | unsigned |
union | void | volatile | while |
第二节:C语言HelloWorld
C语言的基本格式:
# include<stdio.h> int main(void) {
printf("Hello,World"); return 0; }
HelloWorld程序分析:
- # include <stdio.h> 含义是导入函数库,该库的全称为Standard Input Output ,中文含义为标准输入输出。只有在导入了该函数库以后,我们才能在函数中调用一些其已经封装好的函数。
- int main(void) 是主函数,是程序执行的入口。主函数必须要有返回值,这里一般使用0来表示函数执行成功,-1表示函数执行失败。
- printf("HelloWorld"); 是调用了stdio.h中的打印函数,向输出设备打印字符串"HelloWorld",要调用该打印函数必须要引入头文件。
C语言编译过程详解:
C语言的编译过程可以分为如下几个步骤:
源文件Hello.c-->预编译-->编译-->汇编-->链接-->可执行文件Hello.exe
下面我们来详细介绍每一个过程:
- 编写Hello.c文件。
-
预编译过程
预编译过程会将源文件中的#include引入的库进行解析替换,将被包含的文件插入到该预编译的位置。将注释信息全部消除掉。
gcc -E Hello.c -o Hello.i /* gcc -E 是预编译命令, - Hello.c 是要预编译的文件, -o Hello.i 是将预编译好的文件输出为 Hello.i */
-
编译过程
编译是将预编译文件编译成汇编语言的过程。此时的打开的文件是用汇编语言写的。
gcc -S Hello.i -o Hello.s /* gcc -S 是编译命令 Hello.i 是要进行编译的预编译文件 -o Hello.s 是将编译好的文件输出为Hello.s */
-
汇编过程
汇编是将汇编代码转换为机器代码的过程。此时编译好的汇编语言文件会变成机器代码。
-
gcc -c Hello.s -o Hello.o /* gcc -c 是汇编命令 Hello.s 是要进行汇编的汇编语言代码文件 -o Hello.o 是将处理好的机器代码文件输出为Hello.o */
-
链接过程
链接分为静态链接和动态链接,静态链接是将静态库直接添加到可执行文件中去,这样会导致可执行文件过大,而动态链接是指在链接阶段,只添加一些描述信息,在可执行文件运行的过程中再动态的把库添加到内存中。
gcc Hello.o -o Hello /* gcc 是链接命令 Hello.o 是要进行链接的机器码文件 -o Hello 输出要可执行文件 */
第三节:System函数使用
system是stdlib库中函数(stdlib的含义是standard library,即标准库的意思),该函数可以调用执行一些系统命令。如下程序功能就是打开记事本软件。
# include <stdlib.h> int main(void) { system("notepad"); return 100; }
我们将上面程序所生成的可执行程序记为s1,。我们在下面的程序中调用该程序,来进一步观看主函数的返回值效果。
# include <stdio.h> # include <stdlib.h> int main(void) { int i = system("s1"); printf("%d", i); return 0; }
此时程序执行完毕后,会弹出记事本程序,当我们关闭记事本程序之后,会在控制台打印100,因为在s1程序中的主函数返回值是100。