C与C++的微小差异
C无法在for里面定义
集成开发环境 文本编辑器 编译器 链接器
ctrl+f7 仅编译不链接 调用cl 配置检查等级等
但/p 等功能仍需要手动输入
/zi生活曾调试信息,/od禁止优化 –Debug核心选项
release优化版本 有体积优化 有速度优化
报了个error

是默认使用预编译头文件的问题,把他勾选

直接f7 编译加链接,省去cl+link
f9下断点

这个时候f5就有效果了,为调试运行

关心以文件阅读代码还是以函数来阅读代码
在调试窗口打开这个,就可以看到16进制内存

还有stack窗口,配完差不多是这样

watch窗口来看变量的值
f11单步步入,f10单步步过。

第三个回上一层
因为没找到SRC文件,everything查了一下,给他用了别的.c文件,能用了

栈窗口记录行动信息
单步之前预测内存变化,watch输入表达式,例如地址运算
比如

或者直接在watch里面拖到hex里面
alt+8 展开汇编
地址固定的情况下一般都是0040开头,全部变量一般是0042,局部变量参数变量的地址xp 0012 2000 0014 win7 0018 win10 0019
随机地址ASLR,防的只能是远程环境,执行代码等。
本机环境,建立于内存结构理解上
依赖语言下,{}必要,因为遇到宏定义就会出错,调试不会显示。
例如putchar就有宏版和函数版,展开后就没有while依赖。

多分支,对比switch case

if else可以控制命中率,容易命中的放上面。
ifelse可以控制区间比较,复杂的比较条件,文件是否打开,剩余容量。
switch只做常量比较
语法原理相绑定

命中样本一致情况下,default做优化
四种优化方案,第二种:case数据有序(而非case顺序) 数量大于三个
编译器收集各个case地址,然后做成数组表,根据switch表达式结果直接转到对应元素流程运行。
如何查看这个表
下断下这里

打开汇编,这个地址

正好六种情况,如第一个401285

就算case的值顺序不对,数组表的结果也会按照顺序存放。

。
。
三种方式传递结果编译器识别 有保存功能
- 赋值类运算
- 传参
- 传返回值
取整
上取整 ceil 正无穷方向找
下取整 floor 负无穷方向
double传%d值,八位取四位,出错
循环
do效率比for高
goto
实际上就是跳转到NEXT后面的代码行,而非NEXT,next汇编中不展示。
合理场合:
直接跳到最外层,break只能跳一层,例如异常处理

所以看到NEXT和别的编号想减,一般就是在求代码的size。病毒传播使用广泛
完全等价
自己编写仅在多重循环 异常处理使用

for特点

i++在循环体上面
即这样

break continue
。
控制结构 循环结构
循环 线性
递归 非线性
一进一出 效率至少低一倍

要把出口写好

实际运行线路

黄金分割算法 斐波那契
二叉树问题
