首页 > 编程语言 >Visual Studio 2022工作原理及相关配置参数(干货满满)——C++

Visual Studio 2022工作原理及相关配置参数(干货满满)——C++

时间:2024-10-24 20:48:19浏览次数:3  
标签:文件 exe C++ yy Visual Studio Debug

最近工作有点忙,毕业也没多久,确实在企业和学校还是有很大的差距的,这段时间学到了很多很多,也没时间顾及博客了,刚好趁着这个1024稍微放慢脚步,总结总结。
最近用Visual Studio比较频繁,也学到了很多相关的内容,借此博文简单记录一下,全是个人理解,若有地方理解有误还请各位大佬评论指正,万分感谢。

一、Visual Studio运行流程

加入有一个yy.cpp文件,当我们在Vistual Studio下点击运行时,该文件大致会经过以下过程:

yy.cpp ===> 预编译器 ===> 生成yycpp.i预处理后的文件(头文件、宏等展开复制) ===> 编译器 ===> yy.asm(汇编文件) 
接上一行===> 汇编器   ===> yy.obj\yy.o(yy.obj是Windows下的二进制文件,yy.o是Linux下的二进制文件)
接上一行===> 链接器   ===> yy.exe\yy(yy.exe是Windows下的可执行文件,yy是Linux下的可执行文件)

其中可以核心为编译器链接器
编译器(Compiler)主要作用:将头文件、宏等进行展开复制替换,每个.cpp会对应生成二进制文件(.obj),.cpp和.obj一一对应
链接器(Linker)主要作用:将多个二进制文件(.obj)进行整合成一个exe可执行文件

二、Visual Studio相关配置介绍

1,解决方案配置

在这里插入图片描述
Debug和Release大家应该见的很多了,Debug慢,编译器不优化,但有调试信息;Release快,编译器会优化代码,但没调试信息
其实它俩只不过是一套固定的规则模板而已
通过配置也可以将Debug修改成优化、速度优先等,和Release一样

当然Debug和Release有很多区别,比如
Relase下C/C++的优化是优选速度
在这里插入图片描述

Debug的则是禁用
在这里插入图片描述

那我把Debug的相关配置改成和Release完全一样,实在Debug和Release就完全一样了,但不建议哈!!!

2,Visual Studio的目录结构

这些都是虚拟的文件夹,都是假的,虚拟出来的,硬盘中是不存在这些文件夹的
在这里插入图片描述

点击显示所有文件,这才是真正的目录结构
在这里插入图片描述

3,查看预编译文件(yycpp.i)

上述介绍过了,在Windows下.i是二进制文件,假如我们有个yy.cpp,对其进行预编译,可以得到预处理后的文件yycpp.i

//yy.cpp
#include <iostream>

int main(int argc, char** argv) 
{
	int a = 10;
	int b = 20;
	int c = a + b;
	std::cout << "The sum of " << a << " and " << b << " is " << c << std::endl;
	std::cin.get();

	return 0;
}

选择实际的配置,我是Debug下,在C/C++的预处理器中,把预处理得到文件选项选择,应用,确定
在这里插入图片描述
运行程序之后,回到项目文件夹下,可以看到yycpp.i预处理文件

在这里插入图片描述
打开之后,我滴妈6w多行,这些基本都是头文件#include <iostream>的内容,头文件会将对应的内容进行拷贝到这里面,我们的代码实际就框出来那一丢丢
在这里插入图片描述
yycpp.i是我们的程序经过预编译之后的结果

再改回来配置吧
在这里插入图片描述

4,查看汇编文件(yycpp.asm)

修改配置,一定要和你当前的配置一致,都是Debug或者Release哈
在这里插入图片描述
运行程序,多出来yycpp.asm汇编文件
在这里插入图片描述
也有小两千行
在这里插入图片描述
同样再改回来配置吧
在这里插入图片描述

5,程序入口

其实默认的程序入口是main函数,在Visual Studio中可以修改程序入口
在这里插入图片描述
微软官网文档:/ENTRY(入口点符号)

三、Visual Studio最佳配置

在Visual Studio下创建的时候,最好先创建一个解决方案,如何再创建项目
一个解决方案可以管理多个项目,例如,我这里解决方法为Project1,第一个项目也是Project1
其中Project1.sln为解决方案,Project1.vcxproj是我们的项目文件配置,它只是一个XML文件,包含了诸如属性表等配置参数信息
在这里插入图片描述

Visual Studio本身的目录结构就很奇怪
Ctrl + B生成一下项目,可以看到该Project1项目生成了一个Project.exe可执行文件
这个项目生成的exe文件居然在解决方案下的x64里面,而不是项目的x64下
在这里插入图片描述
也就是说,若有多个项目,生成的exe文件都会在解决方案下的x64文件夹下
在这里插入图片描述
而每个项目对应生成的中间文件却都在对应项目的x64文件夹下
在这里插入图片描述

其实这个exe和中间文件都应该分别在对应的项目下才更加符合人性,个人看法哈
Cherno的做法是:exe和中间文件都放在对应项目的bin文件夹下
exe应该输出在对应项目的bin文件夹下的x64文件夹下
中间文件应该输出在对应项目的bin文件夹下的intermediates文件夹下

在这里插入图片描述
输出目录就是项目的exe(或者dll)所在路径,中间目录就是一些没啥太大作用的中间文件而已(汇编、二进制文件等)

在配置属性下的常规中可以自定义输出目录和中间目录
在这里插入图片描述

可以看到这些都是宏定义的,点击编辑
在这里插入图片描述
点击,可以查看全部的宏
在这里插入图片描述
可以看到宏对应的路径,注意有的宏自带反斜杠\,拼接的时候要留意
在这里插入图片描述

若要实现上述讲的配置(EV寒霜引擎Cherno同款配置),复制这两个即可
输出目录:$(SolutionDir)bin\$(Platform)\$(Configuration)\
中间目录:$(SolutionDir)bin\intermediates\$(Platform)\$(Configuration)\
在这里插入图片描述
再次运行项目
exe文件所在路径
在这里插入图片描述
中间文件所在路径
在这里插入图片描述

四、Visual Studio 常用快捷键

我使用的是默认的Visual Studio快捷键,列出一些我常用的快捷键

功能快捷键
编译(生成obj文件)Ctrl + F7
生成(链接成exe可执行文件)Ctrl + B
运行(编译+生成)F5
Debug运行F10
Debug下F10逐过程(不进函数,只拿函数处理后的结果)
Debug下F11逐语句(进入函数)
Debug下Shift + F11跳到下一个断点;跳出函数
右击项目再按A设置该项目为启动项
点一下所选中的项目,按Alt + Enter打开该项目的属性
Ctrl + K + O同名的.cpp和.h切换
Ctrl + M + L折叠/展开函数
Ctrl + K + C注释所选行
Ctrl + K + U取消所选行注释
F3查找下一个
Esc快速关闭查找等小窗口

这才写了一丢丢,还有很多东西想写,奈何太累了,太累了,想休息,有空再补充吧~~~

标签:文件,exe,C++,yy,Visual,Studio,Debug
From: https://blog.csdn.net/qq_41264055/article/details/143217292

相关文章

  • 【动态绘图】python 动态柱形图 动态折线图 bar_chart_race sjvisualizer
    本文主要介绍如何使用Python的bar_chart_race和sjvisualizer模块绘制动态柱形图和动态折线图。关于sjvisualizer包使用详细可见【动态绘图】上。一、实验环境1.1操作系统及Python环境本实验的所使用的操作系统为Windows1064位,Python版本为Python3.12.4,Python编译器......
  • Visual Studio 离线部署
    前言最近在在做一个移植项目,把代码从Unix移植到Windows上面,考虑两个编译链:(1)MINGW64-CRT(交叉编译)(2)VisualStudio。而VisualStudio社区版需保持在线使用,不然试用将存在过期时间。由于办公环境在内网内,所以考虑使用VisualStudio的生成工具配合CMake管理......
  • C++学习笔记2——函数重载
    1.函数重载1.1默认参数C++新增的默认参数指的是函数调用省略实参时自动调用的一个值。通过函数原型设置函数的默认参数,函数定义与没有默认参数时完全相同。如以下函数原型:char*left(constchar*str,intn=1);调用时如果省略参数n,则它的值将为1;否则传入的值将......
  • C++ 双端队列实现
    #include<iostream>usingnamespacestd;#defineullisize_ttemplate<classT>classDualStack{private: structNode{ Tdata; Node*next; }; Node*head,*tail; Node*p; ullilength;public: DualStack(){ head=NULL; length=0......
  • C++ STL queue 的实现
    求点赞,求关注,求评论求点赞,求关注,求评论求点赞,求关注,求评论求点赞,求关注,求评论求点赞,求关注,求评论求点赞,求关注,求评论求点赞,求关注,求评论这篇文章很短,直接给代码:#include<iostream>usingnamespacestd;template<classT>classQueue{protected: structnode......
  • C++学习路线(二十二)
    构造函数构造函数作用在创建一个新的对象时,自动调用的函数,用来进行“初始化”工作:对这个对象内部的数据成员进行初始化。构造函数特点1.自动调用(在创建新对象时,自动调用)2.构造函数的函数名,和类名相同3.构造函数没有返回类型4.可以有多个构造函数(即函数重载形式)构......
  • 计算机毕业设计项目推荐:大学生实习成绩评价系统的设计与实现38147(开题答辩+程序定制+
    摘 要21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存储达到准确、快速、完善,并能提高工作管理效率,促进其发展。论文主要是对大学生实习成绩......
  • 【C++】红黑树万字详解(一文彻底搞懂红黑树的底层逻辑)
    目录00.引入01.红黑树的性质02.红黑树的定义03.红黑树的插入1.按照二叉搜索树的规则插入新节点2.检测新节点插入后,是否满足红黑树的性质1.uncle节点存在且为红色2.uncle节点不存在3.uncle节点存在且为黑色 04.验证红黑树00.引入和AVL树一样,红黑树也是一种自平......
  • 计算机毕业设计项目推荐,个人知识管理系统 79004(开题答辩+程序定制+全套文案 )上万套实
    摘 要尽管我们每天面临的信息越来越多,信息过载与信息噪音越来越严重,但只要我们能充分利用个人知识管理技能,借助有效的个人知识管理软件相信战胜海量信息不再是困难。本课题在分析了个人知识管理现状以及对现有的个人知识管理网站进行研究比较的基础上,针对网络交流互助的特......
  • C++Socket通讯样例(服务端)
    1.创建Socket实例并开启。privateintOpenTcp(intport,stringip=""){//1.开启服务端try{_tcpServer=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);IPAddressipAddr=IPAddress.Any;......