avatar

C语言简介

简介

1
C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译

C语言的特点

HelloWord

1
2
3
4
5
#include <stdio.h>
int main() {
printf("HelloWord");
return 0;
}

代码描述

1
2
3
4
5
6
7
8
9
10
1. 引入操作系统下的系统目录下的库函数
2. 创建只运行的main函数,返回值建议使用int,但也可以使用void
3. {} : 代码块,内部可以有多条语句
4. 所有的可执行语句都必须在代码块中
5. printf : 字符串输出函数
6. 使用int需要返回整数类型的数字,return就是将数字返回的关键字,使用void则无需写语句
7. 每句可执行代码都必须以;结尾
8. ;前没有语句叫做空语句,在C语言中是合法的
9. C语言的扩展名是.c,C++的扩展名是.cpp
10.不同平台的C语言库函数只能保证调用语法一样,但不能保证执行结果也一样

include

1
2
3
4
头文件包含,使用C语言库函数需要提前包含库函数对应的头文件
有两种写法:
#include <文件名> 文件在系统目录下需要使用<>
#include "" 文件在当前目录下需要使用""

stdio.h

1
该文件在操作系统的系统目录下,printf是该文件提供的函数

printf

1
C语言库函数,向标准输出设备输出一个字符串

stdlib.h

1
该文件在操作系统的系统目录下,system是该文件提供的函数

system

1
2
主要功能是通过程序执行另外一个程序,该语句会返回一个整数,该整数就是被调用程序中main函数的return
system函数在Windows中是一个基于控制台的函数,所以即使是在图形界面下调用system也会出现控制台窗口

Windows.h

1
该文件在操作系统的系统目录下,system和WinExec是该文件提供的函数

system

1
2
主要功能是通过程序执行另外一个程序,该语句会返回一个整数,该整数就是被调用程序中main函数的return
system函数在Windows中是一个基于控制台的函数,所以即使是在图形界面下调用system也会出现控制台窗口

WinExec

1
2
主要功能是通过程序执行另外一个程序,该语句会返回一个整数,该整数就是被调用程序中main函数的return
需要进行传值,例: WinExec("control", SW_NORMAL) /* 打开控制面板 */

函数

1
2
3
4
5
6
7
8
9
10
11
12
SW_HIDE             隐藏
SW_MAXIMIZE 最大化
SW_MINIMIZE 最小化,并把Z order顺序在此窗口之后(即窗口下一层)的窗口激活
SW_RESTORE 激活窗口并还原为初始化大小 SW_SHOW 以当前大小和状态激活窗口
SW_NORMAL 同SW_SHOWNORMAL
SW_SHOWDEFAULT 以默认方式运行
SW_SHOWMAXIMIZED 激活窗口并最大化
SW_SHOWMINIMIZED 激活窗口并最小化
SW_SHOWMINNOACTIVE 最小化但不改变当前激活的窗口
SW_SHOWNA 以当前状态显示窗口但不改变当前激活的窗口
SW_SHOWNOACTIVATE 以初始化大小显示窗口但不改变当前激活的窗口
SW_SHOWNORMAL 激活并显示窗口,如果是最大(小)化,窗口将会还原。第一次运行程序 时应该使用这个值

main函数

1
又叫主函数,是C语言程序的入口,程序是从main函数开始执行的,一个C语言程序必须且只能有一个main函数

return

1
代表函数执行完毕,返回return代表函数的终止

返回数据类型

1
2
3
4
5
6
7
8
9
10
int main() {
return 0;
}
当返回的数据类型为int时,需要返回一个整数
在main函数中,return 0代表程序执行成功,return -1代表程序执行失败
void main() {
return;
}
当使用void时,表示不需要返回数据
建议使用main函数时,要将返回的数据类型定义为int,因为C++只接受这种定义方式

注释

1
被指定的字符包裹,在编译器进行代码编译时,会被自动忽略;其主要作用是在代码中加一些说明和解释,有利于代码的阅读

行注释

1
// 注释信息     单行注释,只能将所在行的信息进行注释,是借鉴C++语言而来的

块注释

1
/* 注释信息 */  多行注释,能够将被包含的信息注释,是C语言标准的注释方法

变量定义

1
2
数据类型 变量名;           定义变量,例: int a; 变量名可以随意命名
extern 数据类型 变量名; 声明变量,例: extern int a; 变量名可以随意命名

POSIX

1
2
3
POSIX是一个标准,符合该标准的函数,在不同的系统下执行的结果就可以一致
Unix和Linux很多库函数都支持POSIX标准,但Windows支持的比较差
尽量使用符合POSIX标准的库函数

C语言编译过程

1
2
3
4
5
6
7
1. 预编译      将#include包含的头文件做简单的文本替换,并会将代码中的注释去掉
gcc -E
gcc -o 预编译后的文件.c -E 预编译的文件.c
2. 编译 将文本的C语言编译为二进制的指令
gcc -o 编译后的文件.o -c 预编译后的文件.c
3. 链接 C语言写的程序需要依赖各种库,所以编译后还需要把库链接到最终的可执行程序中去
gcc -o 链接后的文件 编译后的文件.o

C语言编译过程

操作系统结构

用户模式

1
2
在用户模式下运行的软件不能访问内核模式的内存
用户模式下每个程序都不能访问其他程序的内存

内核模式

1
操作系统本身,设备驱动等软件是在内核模式下运行的

32位系统与64位系统的区别

CPU内部结构与寄存器

1
2
3
4
5
6
7
寄存器是CPU内部最基本的存储单元
CPU对外是通过总线和外部设备交互的,总线的宽度是8位,CPU的寄存器也是8位的话,该CPU就是8位CPU
有种CPU内部的寄存器是8位,但总线是4位,那该CPU就是准8位CPU
所有的64位CPU兼容32位的指令,32位会兼容16位的指令;故CPU只向下兼容
64位的CPU架构上运行了64位的软件操作系统,那该系统就是64位操作系统;若在该架构上运行了32位的软件操作系统,则该系统就是32位操作系统
一个CPU的一个寄存器可以放8个二进制位,那该CPU就是8位的CPU;若一个寄存器可以放16个二进制位,则该CPU就是16位的CPU
32位CPU管理内存的最大值是4G

RISC与CISC CPU架构

1
2
RISC精简指令集
CISC复杂指令集

SPARC,X86与ARM

1
2
SPARC,ARM属于精简指令集
X86典型复杂指令

寄存器

X86构架8位CPU 16位CPU 32位CPU 64位CPU
a ax, al, ah eax rax
b bx, bl, bh ebx rbx
c cx ecx rcx
d dx edx rdx
## C语言与汇编赋值写法
1
2
3
4
5
6
7
8
9
10
11
12
13
int a, b, c;
C语言赋值写法:
a = 1,
b = 2,
c = a + b;
汇编语言赋值写法:
__asm {
mov a, 1 /* 将1放到a中 */
mov b, 2 /* 将2放到b中 */
mov eax, a /* 将a放到eax寄存器中 */
add eax, b /* 将b的值与eax寄存器中的值相加再赋值到寄存器中 */
mov c, eax /* 将eax寄存器中的值放到c中 */
}
# C语言关键字

32个关键字

1
2
3
4
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语言控制语句

9种控制语句

1
2
3
4
5
6
7
8
9
if()...else...
for()...
while()...
do...while()
continue
break
switch
goto
return

C语言运算符

34种运算符

1
2
3
4
5
6
7
8
9
10
11
12
13
算数运算符: 		+ - * / % ++ --
关系运算符: < <= == > >= !=
逻辑运算符: ! && ||
位运算符: << >> ~ | ^ &
赋值运算符: = 及其扩展
条件运算符: ?:
逗号运算符: ,
指针运算符: * &
求字节数: sizeof
强制类型转换: (类型)
分量运算符: ->
下标运算符: []
其他: () -

名称定义要求

1
2
可以使用大小写字母,下划线,数字命名,但第一个字母必须是字母或下划线
字母区分大小写

编译异常描述

1
2
warning 不影响编译,只是警告
error 编译器彻底罢工

C语言的特点

1
2
优点:简洁、紧凑,使用方便、灵活,功能强大,执行效率高,表达力强,移植性好;仅有32个关键字,9种控制语句,就能完成无数的功能
缺点:字符串处理方面不如Perl语言,数值计算方面不如Fortran语言,人工智能方面不如Lisp语言

C语言的特点

适用领域

1
2
3
4
5
6
7
1.可以用于网站后台程序的制作
2.可以用于GUI界面的制作
3.可以针对某个主题写出功能强大的程序库,供其他程序适用,从而节省其他程序的开发时间
4.可以用于大型游戏引擎的制作
5.可以编写新的语言:Unix,Linux,Windows,Java,C++,C#,.NET等底层实现都靠C语言
6.可以写操作系统和驱动程序,并且只能用C语言编写,如:Linux操作系统
7.任何设备只要配备了微处理器,就都支持C语言,如:微波炉、手机等等

发展趋势

1
2
3
1.云计算
2.物联网
3.移动互联网
文章作者: 123
文章链接: https://gao5805123.github.io/123/2020/11/27/C%E8%AF%AD%E8%A8%80%E7%AE%80%E4%BB%8B/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 123
打赏
  • 微信
    微信
  • 支付宝
    支付宝