学习认知
- 学习的过程本身就是痛苦的,但是学会之后会获得一种持久的快乐。
- 习惯可以减轻学习中的痛苦。
- 英语很重要,基础知识很重要。
C语言特性
- C语言和汇编语言之间有很强的对应关系。
- C语言可以直接操作硬件,运行时效率非常高(不会检查数组是否越界,也没有异常捕获机制)。
VS基本操作
创建新项目->空项目->配置新项目
解决方案:用来管理多个项目
项目1:
- 头文件:* .h
- 源文件:* .c、* .cpp
- 资源文件:文本、图片、视频、配置文件...
项目2:
头文件、源文件、资源文件
常见的三大问题:
Compiler:语法问题(C开头的错误)
Link:链接错误(L开头的错误)
- 没有包含对应的头文件
- 函数名称写错
- 在函数定义前调用了该函数
Runtime:逻辑问题
调试界面:
调试程序,关键操作:打断点(经验积累)
- 启动调试:F5
- 逐语句调试:F11
- 逐过程调试:F10
- 继续:运行到逻辑上的下一个断点
内存相关
- 内存的最小单位:位(bit)
- 寻址的最小单位:字节(Byte)----8bit
多字节数据如何存储?
- 大端表示法,高地址存放低有效位
- 小端表示法,低地址存放低有效位
例:
int i = 255; //0x000000FF
大端表示法存储:
小端表示法存储:
内存的大小单位
bit: b
byte: 8 bits
KB: 2^10 byte
MB: 2^20 byte
GB: 2^30 byte
HelloWorld
#incldue<stdio> //预处理指令:头文件包含
int main(void){ //int是返回值类型,void是参数类型,此处表示没有参数
printf("Hello World!\n");
return 0;
}
main函数是程序的入口,操作系统会从main函数开始执行程序。
main函数的返回值是程序的状态码,表示程序终止的状态:
- 0:表示程序正常终止
- 非0:表示程序异常终止
程序是如何生成的
程序:可执行的二进制文件(静态)
进程:运行的程序(动态)
程序生成过程就是将源代码(文本文件)转换成程序(二进制文件)。
预处理
项目->属性->C/C++->预处理器->预处理到文件
可以查看预处理后的 .i 文件
预处理指令:以#开头
#include //头文件包含
原理:将头文件中的内容copy到预处理指令所在的位置
#define N 5 //宏定义
原理:文本替换
#define Func(x) 1+x*x //带参数的宏(宏函数)
使用宏函数时的注意事项:
- 左括号要紧贴宏函数的名称
- 把整个宏函数的表达式用括号括起来
- 把参数用括号括起来
- 警惕参数导致的多次副作用
宏函数比起普通函数有什么好处?
答:宏函数主要优于普通函数的地方就是其运行速度比普通函数快。当有些简单函数需要重复调用时,宏函数的优势体现更为明显,因为普通函数的调用需要更多的额外开销,而宏函数则只是简单的文本替换,不需要额外开销,其速度显然会更快。
编译
把源代码翻译成汇编代码
汇编
把汇编代码翻译成对应平台的机器代码(目标代码)
链接
把目标文件和库文件(注意不是头文件,是目标文件的集合)以及OS的引导代码链接在一起生成可执行文件