01.使用C语言的理由
1.1 语法相对易懂 (想对他之前语言)
1.2应用范围比较广泛
1.3可移植性
1.4更强的操作性
02.C语言的应用领域
2.1 操作系统
2.2 编译器
2.3 游戏
2.4 嵌入式/物联网
2.5 桌面程序
....
03.C语言标准
1978年 K&R标准
1989年 C89/C90
1999年 C99
2011年 C11
04.C语言的使用步骤(理论)
4.1 确定需求
4.2 设计程序
4.3 编写程序
4.4 编译链接
4.5 运行
4.6 测试和调试
4.7 维护和修改
05.集成开发环境(IDE)与编译器
IDE:
VS2017
CLION
Dev++
C++ Builder
编译器:
GOC
MSVG
G++
06.编译的步骤
6.1笼统的生成过程
编写源代码 name.c(源文件)
#include <stdio.h>
int main()
{
printf("hello world\r\n");
return 0;
}
编译器编译c语言源文件生成二进制中间文件name.obj(预处理/编译/汇编)
连接器从obj文件中抽取相应的代码及必要数据生成当前操作系统可执行的文件name.exe
运行
6.2 真正生成的四个步骤(kail系统下)
6.2.1 预处理
sudo(管理员运行) gcc(编译器)-E (指令)处理hello.c(文件)将生产的结果 -o (指定)为 hello.i(文件)(复制头文件内容,替换宏的内容等预处理相关指令)
6.2.2 编译
sudo gcc -S hello.i -o hello.s将c语言代码编译成汇编代码
6.2.3 汇编
sudo gcc -c hello.s -o hello.o将汇编代码汇编成二进制
6.2.4 链接
sudo gcc hello.o -o hello 最终链接 加载启动代码和库文件
07.进制和位
07.1进制
2: 0 1 10
8: 0 1 2 3 4 5 6 7 10
10: 0 1 2 3 4 5 6 7 8 9 10
16: 0 1 2 3 4 5 6 7 8 9 A B C D E F
07.2 位(二进制的一个位)
操作系统 x86 x64
符号位:最高位0/1表示正/负
QWORD 64位
FWORD 48位
DWORD 32位
WORD 16位
BYTE 8位
BIT 1位
运营商所说兆率是以bit为单位,在实际下载中,速度以byte为单位
08 VS和Clion的常规使用
VS:
F5 运行
F9 断点
F10 单步步过 跳过函数内部
F11 单步步入 进入函数内部
Clion:
shift + F9 debug 调试
shift + F10 run 运行
F7 步入
F8 步过
作业补充知识
一:什么是可移植性
在计算机领域,可移植性(portability)是指软件的能力,在不同的计算机系统、操作系统或硬件平台上运行。
C 语言是一种通用的、高级的编程语言,可以被编译成机器语言,在不同的计算机系统上运行
二:编译器与连接器的作用
编译器:编译c语言源文件生成二进制中间文件,后缀.obj
连接器:从obj文件中抽取相应的代码及必要数据生成当前操作系统可执行的文件,后缀.exe(windows默认)
三:什么是语法错误,什么是语义错误,区别是什么。
语义错误:
1、别称:逻辑错误;
2、表现形式:在编译阶段不会发现错误,往往是运行结果错误;代码的逻辑有问题,但是编译一般会运行正常。
语法错误:
1、语法错误在编程环境下,在编译期会被发现;
2、在编程语言中,语法错误一定只在编译期时出现,编译器所有语法都正确,才能够正确编译;例如编写代码时,少了一个括号就相当于一个语法错误。
四:静态编译和动态编译应该如何配置,区别是什么
动态编译: 动态编译的可执行文件需要附带一个的动态链接库,在执行时,需要调用其对应动态链接库中的命令。
静态编译:编译器在编译可执行文件时,把需要用到的对应动态链接库(.so或.ilb)中的部分提取出来,链接到可执行文件中去,
区别:
静态库源代码修改后,静态库需要重新编译,程序也要重新编译。
动态库源代码修改后,只需要编译动态库文件即可,程序不需要重新编译。
如果在动态库文件和静态库文件同时存在,优先使用动态库编译。
五:Main函数的意义与头文件的意义
一.头文件的使用
1.头文件一般就是.h结尾的文件
2.一般自己写的头文件就用" "引用,如果是系统提供的头文件就用< >引用。
3.何时使用:我们平时写C语言代码,如果我们在调用一个函数时,必须将函数的定义写在调用函数之前,否则会报错。
#include <stdio.h>:包含头文件 (写在第一行)
#表预处理命令
<>表示,从编译器默认的路径(环境变量)中去找文件stdio.h
<>内资源库为 官方的资源库(文件)
""只找当前目录是否含有该库
""内的为第三方资源库
二.int main()
{
return 0;
}
代码从main()开始
return 0:让main函数返回值,该值为此进程的返回值,此时结束程序