c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键
2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,此时学会c++的话,
我所知道的周边的会c++的同学,可手握10多个offer,随心所欲,而找啥算法岗的,基本gg
提示:系列c++学习的基础和高阶知识,用于公司生产实践中,实实在在的公司部署产品要用的,因为c++速度快,
而java和Python速度慢,自然往硬件里面部署算法啥的,都得用c++或者c,因此本科学的c很重要,后来的Python或者java就没有那么重要了,
c/c++系列文章:
【1】c++:c语言优缺点,visual studio2019如何新建项目,写hello world程序
【2】c/c++:gcc安装,gcc编译hello world文件,system函数调用系统命令,sleep函数
【3】linux下gcc的编译过程和功能,预处理,编译,汇编,链接,.c预处理为.i文件.s文件.o文件.exe文件
文章目录
- c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键
- @[TOC](文章目录)
- c/c++:windows平台下依赖的动态库
- cpu内部结构与寄存器(了解一波)
- 编译程序常见的错误
- c语言代码还能反汇编??
- 集成环境IDE,integrated development environment
- vs常用的快捷键
- 总结
- 总结
文章目录
- c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键
- @[TOC](文章目录)
- c/c++:windows平台下依赖的动态库
- cpu内部结构与寄存器(了解一波)
- 编译程序常见的错误
- c语言代码还能反汇编??
- 集成环境IDE,integrated development environment
- vs常用的快捷键
- 总结
- 总结
c/c++:windows平台下依赖的动态库
下载一个软件:depend.exe
完事就可以查看hello.exe执行所依赖的第三方库了
直接打开hello.exe即可查看
现在我的depend.exe运行不了,卡死了
gg
反正了解一下即可
cpu内部结构与寄存器(了解一波)
我在计算机组成原理里面已经说过了
这里简单了解,拓展一下
寄存器在cpu内部,容量小,但是速度很快
位往往是cpu一次性处理位数的大小
运算的数的位数
内存中的数据是磁盘缓存中来
磁盘缓存从磁盘中来,硬盘
靠近cpu速度
c语言底层对内存时有封装的
我们不看寄存器
计算机发展是向着人类习惯来的,所以底层适应计算机的那些东东比较复杂,我们不咋看【汇编语言】
后来的python,c++,java,go都是底层用c封装的
反正我们后面的代码简单,但是最核心的还是c和c++
visual studio支持你写汇编语言
而且高级的工程师都会汇编语言,这样你能更好地调试代码,知道如何调试代码
#include<stdio.h>
#include<Windows.h>
int main(void)
{
int a;
int b;
int c;//定义变量
__asm
{//高级c语言的工程师都会汇编语言的
mov a, 3
mov b, 4
mov eax, a
add eax, b//加法结果自动放入eax
mov c, eax//将eax和放入c变量
}
printf("%d\n", c);
return 0;
}
看来c语言中,有自动的内存使用区,需要计算时
将变量这些东西放入寄存器中
懂?
如果直接用c呢
#include<stdio.h>
int main(void)
{
int a = 3;
int b = 5;
int c = a + b;
printf("%d\n", c);//直接打印,c底层会搞成汇编语言,但是我们不管了
//%d是格式匹配符,匹配整型数据。放双引号中,c就匹配c
}
看见了没,超级简单的代码
比汇编容易多了
美滋滋
%d是格式匹配符
`#include<stdio.h>
int main(void)
{
int a = 3;
int b = 5;
int c = a + b;
printf(“%d\n”, c);//直接打印,c底层会搞成汇编语言,但是我们不管了
//%d是格式匹配符,匹配整型数据。放双引号中,c就匹配c
printf(“%d + %d = %d\n”, a, b, c);
}`
这个c语言,当年学习的时候老费劲
其实很简单
现在用过了java,python,c++和汇编语言之后
终于明白,c原来真的挺溜的
编译程序常见的错误
你鼠标放到错误的地方,它会提示你,红色波浪线
visual studio的功能很强大的,它会提示你
反正逻辑错误不好查
其他的错误好说
实在不行,就断点调剂即可。
美滋滋
%x的代码好像也没问题
打个断点,程序会停止在这句代码,不执行
你按逐行执行,它就会执行这行代码
程序不是写出来的
而是调出来的
调试代码的过程远比写代码重要。
工具–选项里面找文本编辑器,c/c++,然后勾选行号,选中
然后就可以设置断点了
逐语句执行下一条指令
美滋滋
可以按调试,窗口,监视器,你看看那些变量会啥样
逐行运行
你看看c
变了,看见了么
美滋滋
要先启动调试,你才能添加窗口哦
一般f11是逐行执行,遇到函数,会进入这个函数去一步步执行
f10是执行本行,不会进去,直接执行,然后跳过本行
这种我们在其他的编程语言中依然也是这么玩的
python,java啥的,都这样
c语言代码还能反汇编??
调试-窗口-反汇编
美滋滋
就出来了反汇编的代码
c语言和汇编程序指令是一一对应的
好说,反正我们会汇编语言,你也能理解这玩意
不会汇编也无所谓
集成环境IDE,integrated development environment
Qt
visual studio
pycharm
idea
vs常用的快捷键
自动格式化代码
如果缩进出问题
咱们只需要一个快捷键,就搞定
ctrl+k同时还要追加ctrl+f
#include<stdio.h>
int main(void)
{
int a = 3;
int b = 5;
int c = a + b;
printf("%d\n", c);//直接打印,c底层会搞成汇编语言,但是我们不管了
//%d是格式匹配符,匹配整型数据。放双引号中,c就匹配c
printf("%d + %d = %x\n", a, b, c);
}
排版缩进,和各种空格,都给你排版好了
非常非常nice的
整块注释
ctrl+k,追加ctrl+c
#include<stdio.h>
int main(void)
{
int a = 3;
int b = 5;
int c = a + b;
//printf("%d\n", c);//直接打印,c底层会搞成汇编语言,但是我们不管了
%d是格式匹配符,匹配整型数据。放双引号中,c就匹配c
//printf("%d + %d = %x\n", a, b, c);
}
懂了吧
ctrl+k补加,ctrl+u取消注释
#include<stdio.h>
int main(void)
{
int a = 3;
int b = 5;
int c = a + b;
printf("%d\n", c);//直接打印,c底层会搞成汇编语言,但是我们不管了
//%d是格式匹配符,匹配整型数据。放双引号中,c就匹配c
printf("%d + %d = %x\n", a, b, c);
}
f9设置断点
f5调试
ctrl+f5时运行
f10逐过程不进函数
f11逐行进函数
总结
复习课堂笔记,看看自己写的博客即可
很简单的
前面这几个博客,就是我复习的这些内容,这个课讲得很好的。
总结
提示:重要经验:
1)
2)学好c++,即使经济寒冬,手握10个大厂offer绝对不是问题!
3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。