开始学C++:菜鸟教程-环境设置

刷题结束了,我就想,我很害怕学C++学开发好多东西呀,但自己的烂摊子也要解决呀,不然你怎么翻身呢,再害怕也要面对呀,这刚哪到哪。 Java太tm复杂太多了,打算学C++。之前说C语言郝斌、候捷、翁恺、黑马甲鱼什么的,到C++这不打算看视频了, 理由一: (太多无法释怀了:我那时候去晚了天真以为输出是用队列保存,二哥告诉我。我说打印星型的能否控制台先输出一堆,然后计算再覆盖,他说计算机控制台判断会很快。二哥保研问题(重点)) 目前我能刷这么多的题,但说实话严蔚敏还是谭浩强来着,谭浩强C语言教材,书里的记忆犹新曾经很久都无法释怀:一个秋水仙花数,还有输出打印对称星星三角形的, * *** ***** *** * 我认为连教材这个都不会打什么竞赛,导致每次都想把那个输出三角形的思维弄懂,还有什么著名的求水仙花数,基本排序,斐波那契数列,杨辉三角。这几个始终想弄懂,但搞完了就忘记强迫症异常痛苦,真的花了太多的无用功,浪费了超级巨多巨多的时间。而且每次看打印对称三角形的那个题,我都心特别慌,那时候想acm题目心跳加速特别恐慌,现在图书馆自己刷久了,逐渐没那感觉 ,可以很平静的,记得一开始也慌,后来打一把冲击力的古树旋律好了。 现在我不会再质疑自己,纠结自己,比如 “为什么这么简答的教材上的打印对称星星的要想这么久”了。我也不会去看他干扰心境,但就是有信心了。就是可以想出来。 所以我类比,觉得看Java、C++视频也是,里面很多思考题可能跟打印这个对称星星**一样,没啥意义(重点) 理由二: 视频一屁眼子看着都头大(重点),每天ac题目AC是乐趣的 那接下来,每天自主的学东西查东西,学到一点有一点收获是开心的 而如果看视频,永远是每天在痛苦中,今天看了10集想着还tm剩了1000集,明天看8集还剩999集,麻痹的每天会很压抑。 就像撸管子 不要想自己还要有多少天戒撸,想自己累计戒了10天了,11天了,这种正向的反馈,而不是拿剩下的犹如黑洞一样的漫长未知来压迫自己 成长改变一: 现在会以一个宏观的,整体的思路比如四大特性,先不去管他,接着往下学 之前考研的王道数据结构开始章节的数据结构定义和计组开始那个浮点数,我强迫症停在那一章好久好久好久,就是怎么都无法理解数据结构那个定义什么元素集,data啥的。尽管后面的算法我都会,且有自己的巧妙方法。 我觉得这就是一种成长 跟编程刷题一样,许多博客要倒着看,原因之前讲过 菜鸟教程这里也是,一般第一章睁一只眼闭一只眼来看,千万别卡住 很多介绍就他妈是放屁,等学完一点再回头看第一章 屏蔽B站视频,太JB多了看了想吐,直接看菜鸟教程 查:“会C语言刷题距离C++找工作需要学哪些” (重点) “会acm题目距离找工作C++需要会哪些” (重点) 一个宏观的,整体的思路去想去学 (重点) 现在不会质疑,强迫,怀疑自己,清楚的明白哪些视频都是给傻逼看的。 搜一些:会acm算法,不会编程怎么找工作,这种帖子 而不是傻乎乎跟着看视频,做什么谷粒商城,md你们谷粒商城项目组这么大么?无脑的垃圾项目,看都不想看,给纯小白智障准备的。黑马教程视频md Java全套视频得看一个月,去尼玛的吧,而且就我这么能思考,很多想出来的问题都没人讨论,而且Java东西太JB多了 kaggleB站的就运行不了,机器学习吴恩达第几节来着讲错了还是口误,贴吧问也没人理没人讨论。 不如就学刷题用的C++,通过自己的思考自己的想法,去学C++去查,而不是跟着教程,虽然我一无是处穷途末路,但刷题给我带来的底气,我有这个自信,我并不觉得我刷完题和他们需要0基础看视频的一个水平。且最主要的是,没那么多时间,那视频一旦看起来,我这强迫症真看不完,每一集如果有问题或者老师讲的错误我都能卡好久。除了视频多看不完以外,很多他视频讲的例子,我之前看过几集Java视频,B站的,很多思考题没啥用 毕设几天搞懂,问你几个问题你出去准备《不用现在就可以,你问吧》那时候是java。现学的 (无法理解) 那时候单片机不及格不上课很严的单片机老师唯独我自己回家学了金沙滩宋老师视频 (无法理解) 回去一一解答了他的***钻问题 (无法理解) 回想我至今都无法理解那些三本567傻逼怎么过的这一关 (无法理解) 回忆之前: 尝试过kaggle 做过人体姿态识别项目 小甲鱼C语言单片机 删除了满是残破不堪的大学JavaB站黑马下载的Java视频 占地方,只留了笔记和几个视频 申请到了coursera吴恩达的机器学习的助学金 codingame 速成毕设Java 单片机太多经历了 人体姿态识别 QQ群跳一跳外挂 ———————————————————————————— 爸爸的病是没法改变的,只能听天由命,而我这个是可以自己改变的,我就不信我学不懂C++,没门路没背景,唯一可以吃饭的东西,而我每天都吃不饱饭。好多人:“你不上培训班不行,我领导都说自学人很多基础东西都不知道”、“我们培训班6个月,每天12小时学,你能吗?”、“啥是acm”、“你在这埋没人才了,一个前端L修缘,一个中间业务海米”、另一个人:“我当时是疫情边培训边学,有公司培训还开工资,逼着你,换做现在的我,想重新开始学Java,根本想都不敢想,学不下去,都没精力和劲头学了”、“你在学习呢?你刚毕业啊?像我们都不想学东西了” ———————————————————————————— 为啥前面加一个###: 因为博客园的如果不选择全部折叠,不选择行内代码,如果放在第一行,就废了。那特殊行怎么都删不掉,除非文章内容复制下来,全部ctrlA全部删掉delete,但如果文章里有多个view又是个麻烦事,复制只会复制view几个英文字母 ———————————————————————————— 博客园你先写几个字发布会不审核,后面编辑也基本不再审核了。而如果一开始写一大堆,再发布。就会审核,我一些话就可能过不了审核 ——————————————————————————————— 邓思雨比赛不用vs我也不用,感觉他比其他讲课老师弱太多了。考研,圆形工程空隙面积最多圆木, —————————————————————————————— 之前学Java和吴恩达的机器学习视频都是用word记笔记:文字+截图,考研时候甚至直接截图王道的发qq,太浪费时间感觉,也不回顾,只是看,杂乱无章。浪费了太多的时间 !!而且那些黑马视频啥的都是陈年老旧视频2000年啥的,也太久远了啊,导管子看的A片番号都比他清晰,找资源的本事也不想用,视频没意义 ——————————————————————————- linlinsong学Web开发好像学了一学期,唉 ———————————————————————————————— 银行测试外包孙F:"你有优势,年龄大,好编,几年经验都可以编造。我刚毕业的,不好说",“你去面试别写太多,一看就是假的,因为正常上班工作哪有功夫学那么多,你写那么多一看就是培训班出来的”,我内心呵呵 银行开发应届生:“我刚毕业,都要3年经验的” 我反而希望自己年纪小点,哎 这群烂泥垃圾堆的低级认知的傻逼真的挣扎 我tm没有那不可抗的变故,正常成长轨迹,根本不会跟你们有交集 银行开发外包面试啥也不问,测试直接各种我很无语,找那个13年经验的测试大姐号称专家朱玉Y说:“你想转开发,人家的面试是要问你东西的” 那些低认知 的银行外包开发,你大厂得有人有关系,研究生学历。呵呵呵。内推呵呵 “你问这么多干啥?这跟你测试有关系吗?” “狗屁不通驴唇不对马嘴的案例” “你能写案例吗?”你会啥啊? “人家外包高级测试怎么可能不会代码自动化测试,不比你强啊,你去争取个啥,这么不会为人处事呢” “我直接把之前的别人写的复制粘贴就回来了”,而回想起我自己,很多案例想写出来需要了解很多 银行外包都是这样的干活的吗? 银行其他部门:世界就是个草台班子,你这么认真干活,别人不好干活啊 我宁可累死在开发的岗位,也不想回到外包,太痛苦了 “你们太认真了,这样其他同事没法干活了呀,咱们也不能太出头啊” 曾经:组长“你们都成家了,五一我留下来加班吧” 最后,他人前一套以后一套搞我一个新人,把我搞走,这种人就不怕遭报应吗 公司外包,银行,呵呵都是地痞流氓,捷科西部的经理交付狗何亮:“你在我眼里就是个小白,你会写报告吗?你会带组吗?你会这那的吗?我啥都干过,我做过外面绕线电线的做过。。。”呵呵。满嘴caonima,新疆乌鲁木齐银行捷科外包这群人,满嘴他妈的, 银行里规定五一也要请假 我实在想不通,具体加班费怎么算的,大老远从北京来,报销具体事宜说马Q知道,他是另一个组的组长,我每次只能帮他们组干很多活,做完跟他反馈汇报的时候才敢问一点公司这些的规则 到头来,三个人想地痞流氓一样把我搞走, 工作职场——社会教会了我,这个社会99%的人都是狗 维族人室友,5点睡觉,抽烟放歌 又到了另一个房子:跟耗子一起住,吃芹菜果腹饱腹感,室友打呼噜震天响,觉得很温馨很满足很热闹,可最后,房东房子有老鼠耗子坑我钱——懂得了中国社会教会了我法制法治社会就是狗屁,中国没有法律可言,一句有本事你告我去啊我等你律师函,从社区到110到社区民警到12345到市场监督管理局到住建部都是一群吃干饭的 吃饭蟑螂,头发,不给水,饭馆油烟子,抽烟的,只能忍受, 再到乌鲁木齐骑行圈,我带的队全国敢说第一没人敢说第二,可被诋毁造谣。 天地之大没有我容身之处,每天一个人独自在新疆图书馆学东西 一个200斤胖子的饭量,到每天只舍得花16+18吃两顿饭,饿就多喝点图书馆的水,5块钱买俩烤葡萄干馕,不至于饿死,给父母买营养品治病的药, 看透了这个社会,想做一个杀伐果断,做事够狠够绝的人。 雷诺五亿探长 黑社会电影,和为贵 “新义安:怎么做事别人做犯法我做就不犯法” 乌鲁木齐的冬天比哈尔滨冷多了,只穿薄衣服,磨练意志,时刻提醒自己 为什么回不去内地,沦落到这个地步 5块俩的烤肠克制自己不去买,意志力,有了一次就会有第二次总想买, 省钱,每天不坐公交,从宏景天汇世纪花苑到图书管4km,来回8km吃饭2km,总共每天走10km 老子不需要什么狗屁情绪价值,我要艹翻你们。 出头。有问题就解决。 从底层的烂泥堆,垃圾堆里,挣扎着爬出来,含泪生生杀出来的白手起家的创一代 那些富二代。一生顺遂的人没有资格。让我看一眼 我的父母足够伟大,爬不起来是我没本事,我理解了那些人为什么都跑去国外了
菜鸟教程环境设置
###2024/12/25 下午18:00开始学C++写此博客
###
就看 菜鸟教程 吧。
开始学C++,灵活一点。
妈逼的刷了这么多算法题开始学C++第一步的安装软件差点给我劝退了,咋这么多又是文本编译又是啥啥的。都说刷算法题的人学C++java那点玩意都是增删改查,学起来更快,这也不是啊,我感觉自己还是笨笨的,怎么都学不会,感觉比算法难多了,当初也是单片机搞不懂光立方学的acm。现在是Java学不会才学C++的主要Java太长了那些输入输出的关键字也是当时没有正确的学习方法,吃七个烧饼饱的不是第七个饱的,是有前六个垫底。测试干不下去。不屑自动化测试。就用codeblock吧,安装vs和AI编程助手真麻烦,先搁置。
先介绍工具:
GPT的解释:
Question:(文本)编辑器 是啥?
Answer:简单来说就是咱们写代码、写文章、编辑文本内容的工具,像是一个虚拟的笔记本,能方便地输入、修改和保存各种文本信息。
至于你刷算法题用的CodeBlocks,它可是一个相当流行的C++集成开发环境(IDE)哦!在算法竞赛中,它经常被用来编写、编译和运行C++程序。它提供了代码编辑、语法高亮、自动补全、编译调试等一系列强大的功能,能够大大提高编程效率和体验。
Q:文本编辑器和IDE一样吗?codeblock是文本编辑器吗?
A:文本编辑器和集成开发环境(IDE)虽然都是用来编写代码的工具,但它们之间还是有挺大区别的。
文本编辑器就像是个基础的文本处理工具,主要功能是输入、修改和保存文本。比如,Windows上的记事本(Notepad)或者Linux上的gedit,这些都可以看作是文本编辑器。
而集成开发环境(IDE)呢,那可就是个加强版的文本编辑器了!它不仅包含了文本编辑的功能,还提供了代码编译、调试、项目管理、语法高亮、自动补全等一系列强大的功能。在开发大型项目或者复杂程序时,IDE可是咱们程序员的好帮手呢!
至于CodeBlocks,它其实是一个集成开发环境(IDE),而不是一个简单的文本编辑器。虽然它当然可以用来编写和编辑C++代码,但它的功能远不止于此。它提供了编译、调试、错误提示等一系列功能,让咱们写代码更加轻松高效。
Q:Visual Studio Code应该是IDE吧?他感觉比codeblock强大啊,为啥菜鸟教程上说Visual Studio Code它是一个通用的文本编辑器?
A:你提到的Visual Studio Code(VS Code)嘛,这确实是个很有意思的工具!它起初是被设计为一个轻量级但功能强大的文本编辑器,专注于提供优秀的代码编辑体验。不过,随着它的发展,通过安装各种扩展,VS Code现在已经能够支持编译、调试、版本控制等一系列IDE(集成开发环境)的功能了。
这就好比说,VS Code原本是个专注于文本编辑的“小能手”,但现在通过不断学习和“升级”,它已经变成了个能够应对各种开发需求的“多面手”了!
也正因此,不同的人对VS Code的定位和看法可能会有所不同。有些人可能更看重它作为文本编辑器的简洁和高效,而有些人则更喜欢它提供的各种IDE功能。
所以嘛,说VS Code是一个通用的文本编辑器,其实也不算错,毕竟它确实提供了非常出色的文本编辑体验。但同时,它也能够通过扩展支持各种IDE功能,满足更多样化的开发需求。
Q:是不是说VS Code从记事本的角色升级为了codeblock的角色?
A:你的比喻挺有趣的呢!确实,从简单的记事本升级到像CodeBlocks这样的IDE,就像是给咱们的编程工作配备了一套“高级装备”!
记事本嘛,就像是个基础的“小铁锹”,能满足咱们最基本的文本编辑需求。但要是想盖座“高楼大厦”,那可就得用上像CodeBlocks这样的IDE了!它提供了代码编辑、语法高亮、自动补全、编译调试等一系列强大的功能,就像是给咱们配备了各种“高级工具”和“施工图纸”,让咱们能够更加高效、准确地完成编程任务。
而且啊,IDE还能帮咱们更好地管理项目,比如组织代码文件、管理依赖库之类的,让咱们在开发大型项目时能够更加游刃有余。
所以嘛,从记事本升级到IDE,不仅能让咱们的编程工作变得更加轻松高效,还能让咱们在编程的道路上走得更远、更稳!
Q:vim是IDE吗?
A:不是IDE,是个相当有名的文本编辑器,尤其受到很多程序员和黑客的喜爱呢!它以其强大的功能和高度的可配置性而闻名于世
Q:啥是源文件?源代码?
A:你IDE创建的.cpp文件就是源文件,里面的代码就是程序源代码
Q:编译器又是啥?
A:我们程序员的各种C++/Java等语言,计算机看不懂,需要转化为0101机器语言,编译器就像是个“翻译官”,能把咱们写的C++代码翻译成计算机能理解的机器语言,在IDE里,编译器是个非常重要的组成部分,它让咱们能够轻松的 编译 和 运行 代码,主流的就是GNU编译器集合
Q:codeblock里有编译器吧?
A:是的,集成开发环境就是 IDE,codeblock就是一种IDE,里面都会包含编译器,通常是GNU GCC编译器
Q:GNU GCC究竟是啥?
A:是个相当有名的编译器集合呢!它全名叫GNU Compiler Collection,也就是GNU编译器套件。这个套件里可是包含了好多不同语言的编译器哦,比如咱们C++程序员最常用的C和C++编译器。
GNU GCC最大的特点之一就是它是开源的,这意味着咱们可以查看和修改它的源代码,让它更好地适应咱们的需求。而且啊,由于它是开源的,所以它的社区支持也非常强大,有很多热心的开发者在不断地为它贡献代码和修复漏洞。
在C++编程中,GNU GCC可是个非常重要的工具哦!它能把咱们写的C++代码编译成机器语言,让计算机能够理解和执行。而且啊,由于它是开源的,所以咱们在使用它的过程中,如果遇到什么问题或者有什么需求,都可以随时向社区求助或者自己动手修改代码来解决。
Q:那我有codeblock了还用整这些玩意吗?为什么菜鸟教程里说要安装Cygwin呢?学C++要在windows上安装Cygwin模拟linux环境有啥必要吗?麻痹的菜鸟教程的 环境配置 这节光一堆配置各种工具就差点给我整劝退了,好头大啊。

好想刷两道题放松一下,楼教主军训刷题放松。男人八题,单人碾压屠榜实力太强导致被禁赛
A:这个问题嘛,其实涉及到操作系统和开发环境的选择。在Windows上安装Cygwin来模拟Linux环境,主要是为了方便咱们在Windows系统上也能享受到Linux系统下的一些好处。
首先啊,Linux系统下有很多非常优秀的命令行工具和库,这些工具和库对于C++开发来说可是非常有用的。但是呢,由于Windows和Linux是两个不同的操作系统,它们的命令行环境和工具集也是不一样的。所以,如果咱们想在Windows上也能使用这些Linux下的工具和库,那就得想个办法了。
而这个办法呢,就是Cygwin!Cygwin能够在Windows上模拟出一个Linux环境,让咱们能够在Windows系统上运行Linux的命令行工具和程序。这样一来,咱们就可以在Windows上编写、编译和运行C++代码了,而且还能使用到Linux下的一些优秀工具和库。
此外啊,有些C++项目可能需要在Linux环境下进行编译和运行,如果咱们没有Linux系统的话,那就可以在Windows上通过Cygwin来模拟出Linux环境,从而完成这些项目的编译和运行。这对于处理跨平台项目或者需要使用特定Linux工具的情况来说,可是非常有用的哦!

刷题这么久学计算机这么久一直我如果还看视频,这些玩意还会一知半解搞不懂,第一次搞这么透彻,真的发现视频讲的真都是给垃圾傻逼看的,直接百度就容易学会,真正重点就是我问GPT的上面这些,视频根本不讲,这样带着自己疑问去搜索比看视频强多了,一份收获有一份的开心,也不会因为还有多少集视频而焦虑,菜鸟教程的环境配置这一节,我就展开不少东西。哎,这是人家大一就应该干的事。
注意:安装完Cygwin发现快捷键:Ctrl+CV不行,复制选中就行,粘贴是Shfit+Insert。
没什么用的小疑惑?
0、为啥同样是C:\cygwin64\,一个not found,一个就没问题
1、
C:\cygwin64就not found,
C:\cygwin64\就能进去个右三角,
2、说在命令行进入 setup-x86_64.exe 目录下,执行 setup-x86_64.exe -q -P wget -P gcc-g++ -P make -P diffutils -P libmpfr-devel -P libgmp-devel -P libmpc-devel 来安装gcc/g++的编译环境,我搞了半天始终都说command not found,添加 环境变量 也不行,但我输入查询版本 gcc --version 却有信息,这个应该是codeblock安的吧?搞不懂过,先搁置,换做之前就会死磕。(后来发现应该在windows下打开cmd进入exe那个目录下搞,而不是在cygwin里搞)
Q:gcc/g++ 的编译环境和GCC区别
A:GCC(GNU Compiler Collection)是一个开源的编译器集合,它包括了多种语言的编译器,比如C、C++、Jaca、Go等。GCC的目标是提供一个性能优良、目标代码质量高、且可移植性好的编译器。
而当我们提到gcc/g++时,我们通常指的是GCC编译器集合中的C编译器(gcc)和C++编译器(g++)。这两个编译器提供了将C/C++源代码编译成可执行文件的功能。
gcc,全名GNU Compiler for C,它主要是用来编译C语言程序的
g++,全名GNU Compiler for C++,它可是C++程序的专属编译器
至于编译环境,它通常指的是一个包含了编译器、链接器、调试器、库文件和其他开发工具的软件集合。这个环境使得开发者能够编写、编译、链接、调试和运行他们的程序。
所以,GCC是编译环境中的一个关键组件,它提供了编译源代码的能力。而编译环境则是一个更广泛的概念,它包括了GCC以及其他有助于程序开发的工具。
简单来说,GCC是编译源代码的“厨师”,而编译环境则是包含了这个“厨师”以及其他“助手”的“厨房”。
Q:有编译器是不是就有编译环境了
A:编译器只是编译环境中的一个核心组件,但仅仅有编译器并不意味着你就拥有了一个完整的编译环境。
编译环境通常指的是一个包含了编译器、链接器、调试器、库文件和其他开发工具的软件集合。这些组件协同工作,使得开发者能够编写、编译、链接、调试和运行他们的程序。
编译器的主要作用是将源代码编译成目标代码(也就是机器码的前身),但它并不能直接生成可执行文件。
链接器的作用是将多个目标文件和库文件链接在一起,生成最终的可执行文件。
调试器则帮助开发者在程序运行时查找和修复错误。
库文件则提供了一些预定义的函数和数据结构,供开发者在编写程序时使用。
所以,虽然编译器是编译环境中的关键部分,但一个完整的编译环境还需要其他组件的支持。
总结:
GCC编译器集合
gcc是C编译器
g++是C++编译器
疑惑:
文中说:接下来我们安装 gcc/g++ 的编译环境,完事后输入 gcc --version 命令就可以查看版本信息了。
又说为了在Windows 上安装 GCC,您需要安装 MinGW-w64。
Q:那gcc version如果有显示是表示有gcc还是表示有编译环境呢
A:gcc version命令的显示结果只是表明你的系统中安装了gcc编译器,但这并不意味着你的系统中就存在一个完整的编译环境。简单来说,gcc version 命令的输出是gcc编译器的“身份证”,但它并不能证明你的编译环境是否“齐全”。希望这个解释能让你明白!
Q:MinGW-w64是不是一个完整的编译器环境的工具链,
A:没错,MinGW-w64 确实是一个完整的编译器环境的工具链,即编译环境。它为 Windows 系统提供了一个完整的 GCC 工具链,支持编译生成 32 位和 64 位的 Windows 应用程序。这意味着,通过 MinGW-w64,你可以在 Windows 上进行 C 和 C++ 的开发,并且享受到 GCC 编译器带来的各种优点,比如良好的性能、高度的可移植性以及丰富的编译选项。
MinGW-w64 还包括了一些必要的工具,比如链接器、调试器(虽然可能需要额外安装,如 GDB)等,这些工具协同工作,使得开发者能够编写、编译、链接、调试和运行他们的程序
MinGW虽然是GCC的移植版本,但它可是专门为Windows平台设计和优化的。
MinGW,全称Minimalist GNU for Windows,它包含了GCC编译器以及其他一些必要的工具和库,使得在Windows上进行C和C++开发变得和Linux上一样方便。换句话说,MinGW为Windows平台提供了GCC编译器的功能,让我们这些Windows用户也能享受到GCC带来的各种好处。
Q:为啥大多数人用linux开发?
A:首先啊,Linux是开源的,这意味着开发者可以自由地访问、修改和共享源代码。
这种开放性鼓励了开发者之间的合作,使得解决问题和改进系统的速度更快。而且,Linux系统具有高度的自由度,开发者可以根据自己的需求和喜好进行自定义配置和优化,这可是很吸引人的哦!
再者,Linux系统提供了丰富而强大的命令行工具集,如grep、sed、awk等,这些工具在处理文本、过滤数据、进行搜索和替换等操作方面简直不要太好用!
而Windows操作系统并不是开源的,它是由微软公司开发的,源代码是封闭的
Linux操作系统是由Linus Torvalds是芬兰的计算机科学家开发的,他在1991年开始开发Linux操作系统,最初只是为了学习操作系统内核的开发,学习了Unix,结果自己给自己的个人计算机编写一个操作系统。没想到,这个系统后来火遍了全球,得到了广泛的支持和贡献,成为了开源项目的一颗璀璨明珠!
Q:安装了mingw 不用安装 gcc和g++了吧
A:对的
收获:
这么一看自己查问GPT,真的好,再看很多博客都是错的,比如这个博客。而至于谁对谁错其实很容易判断,GPT说的更能符合逻辑,其实就是解释定义,其他写错的博客基本都云里雾里,解释没逻辑前后矛盾。
Q:cygwin和cmd区别
A:Cygwin和CMD可是Windows下的两大命令行工具,它们各有千秋哦!
Cygwin是一个在Windows上提供类Unix环境的免费软件工具集合。它允许你在Windows平台上运行和编译遵循POSIX标准(底层系统调用接口

POSIX啊,那可是个好东西!全称是“Portable Operating System Interface”,
也就是“可移植操作系统接口”。简单来说,它就是一组由IEEE(电气和电子工程师协会)
制定的标准,旨在确保操作系统在多平台上的可移植性。
有了POSIX,开发者就可以编写一次代码,然后在不同的操作系统上进行编译和运行,
而不需要针对每个操作系统进行特定的修改。这对于跨平台开发来说,简直是太方便了!
POSIX标准涵盖了文件管理、进程控制、用户权限、系统调用等多个方面,
为开发者提供了一套完整的、跨平台的接口。这样,无论是在Unix、Linux还是macOS上,
开发者都可以使用相同的API来进行开发。
而且,POSIX标准还在不断更新和完善,以适应新的技术和需求。
所以,如果你在进行跨平台开发,或者希望你的程序能够在多个操作系统上运行,
那么遵循POSIX标准绝对是一个明智的选择。
)的应用程序,而无需大幅修改源代码。Cygwin提供了一个动态链接库(DLL),模拟了Linux下的核心接口和功能,包括大量的GNU和开源工具。这样,Unix下的许多应用就能在Windows上编译和运行啦!它特别适合跨平台开发、学习Unix/Linux命令,或者在Windows上运行Unix应用的场景。
而CMD呢,它是Windows自带的命令行工具,提供了基本的命令行操作功能。你可以通过CMD来管理文件、目录、进程、网络配置等,还能编写批处理文件来自动化重复性的任务。CMD的文本界面简洁明了,对于许多任务来说,使用CMD比图形界面更快捷、灵活。它可是系统管理、故障排除、网络操作的好帮手!
总的来说,Cygwin和CMD各有优势,选择哪个就看你的具体需求啦!如果你需要在Windows上体验Unix环境,那Cygwin肯定是首选;而如果你只是需要进行一些基本的命令行操作,那CMD就足够了。
Q:GNU就是编译器吧?
A:GNU可不是一个简单的编译器哦,它是一个自由软件运动的项目,旨在开发一个完全自由的操作系统。这个操作系统包含了内核、shell、编程语言编译器、文本编辑器、文件系统等组件,其中GNU编译器套件(GNU GCC简称GCC)只是它的一部分。
GNU GCC是一个强大的工具集,支持多种编程语言的编译,包括C、C++等。它是许多自由软件项目的关键组成部分,也是许多商业软件开发的重要工具。但是,GNU项目还包括了许多其他的软件工具和应用程序,比如GNU调试器(GNU GDB,简称GDB)、GNU Bash(一种Unix shell)等。
所以,下次可别说GNU就是编译器啦,它可是一个包含了许多自由软件和工具的庞大项目呢!
Q:Visual Studio Code和Visual Studio
A:Visual Studio Code和Visual Studio都是微软家的产品,但它们可不一样哦!
Visual Studio Code(简称VS Code)是一个免费的、开源的源代码编辑器,它轻量级但功能强大,支持多种编程语言和框架,比如C++、Python、Java等。VS Code可以在Windows、macOS和Linux系统上运行,提供了智能代码编辑、调试功能、丰富的插件生态系统等。它的插件支持Git、Docker等各种工具和框架,让开发者可以根据需求增强功能。而且,VS Code还内置了Git支持,开发者可以直接在编辑器中进行版本控制操作。
而Visual Studio呢,它是一个完整的集成开发环境(IDE),提供了更全面的开发工具和服务,支持多种编程语言,如C#、C++、Visual Basic等,并集成了编译器、调试器、代码编辑器、测试工具以及版本控制等多种开发工具和服务。通过Visual Studio,开发者可以更加便捷地编写、编辑、调试、测试和部署应用程序。Visual Studio有多个版本,以满足不同开发者的需求,比如社区版是免费的,适合个人开发者、开源项目和小型团队使用。
简单来说,VS Code是一个跨平台的代码编辑器,而Visual Studio是一个完整的集成开发环境。选择哪个工具,就要看你的具体需求啦!
Q:Visual Studio Code如果比喻成是记事本Visual Studio 就是codeblock对比
A:你这个比喻挺有意思的!
确实,如果把Visual Studio Code比喻成记事本,那么Visual Studio就更像是一个功能全面的集成开发环境(IDE),类似于CodeBlocks。不过呢,Visual Studio和CodeBlocks之间还是有一些区别的哦!
Visual Studio是微软开发的一款强大的IDE,它支持多种编程语言,特别是对C++提供了卓越的支持。Visual Studio拥有调试工具、代码编辑器和丰富的库函数,使得开发过程非常高效。它的用户界面友好,自动代码补全和错误提示功能能极大地提升编码效率。
而CodeBlocks呢,它是一个开源的C/C++和Fortran IDE,被设计成很容易使用同时又具有可扩展性。CodeBlocks支持多个编译器,包括GCC和MinGW。它的界面直观,功能可以通过插件进行扩展。相对于其他IDE,CodeBlocks更加轻量级,对系统资源的占用较少,适合配置较低的电脑使用。
Visual Studio比CodeBlocks好的地方主要在于其功能的全面性和与微软生态比如Azure云计算服务的无缝对接。
Q:搞了个Vs,关于那个Vs preview预览版咋回事?
贴吧网友:VS2022 Preview就是体验新版本新功能用的,一般初学不用他。以下原文

VS2022和VS2022 Preview的主要区别在于功能和稳定性。VS2022是微软官方出品的最新版本的开发工具包系列产品,是一个完整的开发工具集,包含了整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等等。而且,VS2022是VS历史上的第一个64位版本,并提供了新的功能和性能提升。相比之下,VS2022 Preview版则是一个预览版本,通常会提供一些新的特性和功能,但可能存在一些不稳定的情况。这个版本主要是为了方便开发者提前体验新的功能和性能改进,并提供反馈和建议,以便微软在正式版中做出更好的改进。如果你想使用VS2022 Preview版,你可以选择保留原有的VS2022版本,同时安装Preview版。这样,你可以在需要的时候进行切换,并保留原有的功能和稳定性。总之,VS2022和VS2022 Preview版的主要区别在于功能和稳定性。如果你需要使用最新的功能和性能改进,可以选择安装Preview版;如果你需要稳定性和可靠性,可以选择使用正式版。
Q:据说Vs2022之前都是32位,那咋在64位运行的啊,相当好奇
A:暂时感受不到,直接贴个回答

这个问题挺有意思的!首先,要明确一点,无论是32位还是64位的应用程序,都可以在64位的操作系统上运行。只不过,32位的应用程序在64位的操作系统上运行时,会受到一些限制,比如无法访问超过4GB的内存等。 现在,来说说Visual Studio 2022。Visual Studio 2022本身是一个64位的应用程序(当然,它也提供了32位的版本,但这里我们主要讨论64位的情况)。当你在64位的操作系统上安装并运行Visual Studio 2022时,它会以64位模式运行,这意味着它可以充分利用64位操作系统的优势,比如更大的内存寻址空间等。 至于你之前提到的“之前都是32位”,我猜你是指你之前可能一直在使用32位的Visual Studio版本,或者你的应用程序是32位的。如果是这样的话,当你切换到64位的Visual Studio 2022时,你可能需要确保你的应用程序也是64位的,或者至少你的开发环境能够支持32位和64位应用程序的编译和运行。 总的来说,Visual Studio 2022在64位操作系统上运行是完全没问题的,而且它还能提供更好的性能和更大的内存支持。如果你有任何关于如何在64位系统上配置和运行Visual Studio 2022的具体问题,随时告诉我哦
bing比百度强太多太多,百度太烂了
从VisualStudio2022开始,就不支持32位的程序了。
简单搜了下,2022之前比如2019支持64位, 再查了下,并没有说2022之前只支持32位的事,2022之前支持32/64,2022开始仅支持64。看来上面那个百度回答真的太误人子弟了。
开始学具体操作:
新建项目开始写东西的具体操作,菜鸟教程说 打开:Templates -> Visual C++ -> Win32 Console Application(模板->Visual C++->Win32控制台应用程序) ,但他教程下的笔记都是20年3月份的,所以他的文章最晚是20年,那版本一定是20版本之前的旧版本,之前创建选Win32 Console Application,可现在Vs2022界面都是中文的,Vs2022应该创建什么,bing搜了下,百度一堆狗屁回答,找到个博客晕看不懂, B站看了几秒解决了,发现没编程语言的选项,也搜不到Console Application,可能没安装东西,安装了个桌面C++那个,直接耗费我3G流量热点+11G电脑内存,再打开就出现控制台选项了。高级玩意就这点不好,codeblock我都直接上来就写,Vs要安tm一堆破玩意,科普一堆东西,进入不了正题,真的是第一章魔咒,真是头大心塞。兴许看视频这些小问题会解决,但我始终觉得看视频弊大于利。
Q:又有疑问了,我习惯的codeblock直接创建了,为啥Vs要搞创建Win32控制台应用程序?win32啥意思
A:看来你对Code::Blocks的简洁创建方式很中意啊!不过,Visual Studio之所以要求你明确创建一个Win32控制台应用程序,是因为它想让你更清楚地了解你的项目类型和目标。那么,什么是Win32控制台应用程序呢?简单来说:
Win32是指Windows 32-bit API,也就是Windows操作系统提供的一组底层应用程序接口。这些接口允许开发者直接与Windows操作系统进行交互,实现各种功能。
而控制台应用程序,则是一种没有图形用户界面(GUI)的应用程序,它主要通过命令行界面与用户进行交互。
创建Win32控制台应用程序,实际上是在告诉你,这个项目将使用Win32 API来开发一个运行在命令行界面下的程序。这种方式非常适合初学者学习Windows编程,因为它可以让你更专注于理解底层原理和API的使用,而不是被复杂的图形界面所干扰。
当然,如果你更喜欢图形界面的应用程序,Visual Studio也提供了创建Windows桌面应用程序的模板,你可以根据自己的需求来选择。
总的来说,Visual Studio要求你明确创建项目类型,是为了帮助你更好地规划和实现你的项目目标。而Win32控制台应用程序,则是学习和使用Win32 API的一种很好的方式。
Q:codeblock是只有64位控制台界面,Vs是2022之前是32位控制台界面+图形界面,2022开始是64位控制台界面+图形界面对吗?
A:你观察得真细致呢!确实,Code::Blocks 和 Visual Studio在控制台界面和图形界面方面,以及32位和64位的支持上,都有一些差异。
首先,关于Code::Blocks,它通常提供的是64位的控制台界面版本
而Visual Studio则更加灵活。在2022版本之前,Visual Studio既支持32位的控制台界面,也支持图形界面(Windows窗体或WPF等)
而在2022版本及之后,Visual Studio进一步增加了对64位控制台界面的支持,同时仍然保留了图形界面的开发能力。
这些变化对开发者的开发体验和应用程序的兼容性都有一定的影响。随着64位操作系统的普及,越来越多的应用程序开始迁移到64位架构上,以充分利用64位系统提供的更大内存和更高性能
Q:Vs2022之前叫win32控制台文件,2022开始就是win64控制台了吗
A:在Visual Studio中,Win32控制台应用程序的命名可能会让你有些困惑,尽管名称中仍然包含“Win32”,但Visual Studio 2022(以及之前的版本)是支持创建64位控制台应用程序的。这里的“Win32”更多是一个历史遗留的命名,它并不代表你的应用程序只能是32位的。
Q:那2022版本开始是不是默认是win64了
A:感觉回答不太对,但基本没啥疑问不重要了

1 Visual Studio 2022确实支持64位开发,包括Win64控制台应用程序。但是,要说它是否“默认”是Win64,这个就不一定了。 2 3 当你安装Visual Studio 2022时,你可以选择安装不同的工作负载和组件,这些选择会影响你的开发环境设置。同样地,当你创建一个新的项目时,你也可以配置项目的架构设置,比如选择32位或64位。 4 5 所以,默认设置可能因你的安装选项和项目配置而异。如果你想要创建一个64位的Win32控制台应用程序(尽管名称中仍然包含“Win32”,但你可以配置它为64位),你需要在创建项目时指定正确的架构设置。 6 7 在Visual Studio 2022中,你可以通过以下步骤来检查和更改项目的架构设置: 8 9 打开你的项目。 10 11 在“解决方案资源管理器”中,右键点击你的项目名称,然后选择“属性”。 12 13 在弹出的项目属性窗口中,找到“配置属性”下的“平台”选项。 14 15 在这里,你可以看到你的项目当前配置的架构(比如x86、x64或ARM等)。 16 17 如果你想要更改为64位,就选择“x64”。 18 19 点击“确定”保存更改。
Q:sln是啥文件
A:

哈哈,你问到了一个很关键的问题呢!sln文件其实是Visual Studio中的一个非常重要的文件,它代表了解决方案(Solution)。
在Visual Studio中,一个解决方案可以看作是一个容器,它里面可以包含多个项目(Project)。这些项目可以是不同类型的应用程序,比如控制台应用程序、Windows窗体应用程序、WPF应用程序等。而sln文件,就是用来组织和管理这些项目、项目项以及解决方案项的。
具体来说,sln文件是一个文本文件,它里面包含了解决方案中所有项目的引用和配置信息。当你打开一个sln文件时,Visual Studio会根据这个文件中的信息来加载和显示解决方案中的所有项目。这样,你就可以在一个统一的界面中管理和构建多个项目了。
所以,简单来说,sln文件就是Visual Studio中用来组织和管理多个项目的文件。它使得开发者可以更加方便地管理和维护自己的项目,提高工作效率。
黑色看的眼睛要瞎了,之前觉得黑色高大上,绿色护眼,发现真的受不了,换成浅色了
好恶心,按照菜鸟教程说的新建了个MyFirstProgram.cpp,然后又建了个main.cpp,写了个helloword报错了说main在什么已经在main.obj中定义了,连个行数也没有,艹了真服了这垃圾软件。发现教程里并没有MyFirstProgram.cpp,可是这玩意是我新建MyFirstProgram自动带出来的啊,服了,把MyFirstProgram.cpp里的代码都删掉,再运行就好了。
关于cygwin进入目录
Q:windows下cmd输入: cd C:\Users\GerJCS岛\source\repos\MyFirstProgram\MyFirstProgram 可以进入到My这个路径,但cygwin64输入这句话为啥说没有这个文件
A:嘿,这个问题挺有意思的!Cygwin64和Windows的cmd在路径处理上确实有点不同。在Windows的cmd里,你可以直接输入那种带有特殊字符(比如你的路径里的“岛”字)的路径,但Cygwin64可就不一定了。
Cygwin64为了模拟Unix环境,对路径做了一些转换。它通常会把Windows的路径转换成一种Unix风格的路径。比如,你的Windows路径C:\Users\GerJCS岛\source\repos\MyFirstProgram\MyFirstProgram
,在Cygwin64里可能会被转换成类似/cygdrive/c/Users/GerJCS岛/source/repos/MyFirstProgram/MyFirstProgram
这样的路径。
不过,由于你的路径里包含了中文特殊字符,这可能会给Cygwin64的路径转换带来一些麻烦。你可以试试以下几种方法:
-
使用Cygwin64的转换路径功能:在Cygwin64里,你可以使用
cygpath
命令来转换路径。比如,你可以在Cygwin64的终端里输入cygpath 'C:\Users\GerJCS岛\source\repos\MyFirstProgram\MyFirstProgram'
,看看它会给出什么样的路径。 -
避免使用特殊字符:如果可能的话,尽量避免在路径里使用中文特殊字符。这不仅可以减少路径处理上的麻烦,还可以避免一些潜在的兼容性问题。
-
检查Cygwin64的安装和配置:确保你的Cygwin64安装正确,配置也没有问题。有时候,一些配置错误或者安装不完整的问题也会导致路径处理上的异常。
测试了下发现跟中文目录没关系,就是cyg特殊路径的事。
Q:为啥cygwin里执行$ gcc main.cpp -lstdc++ -o main输出的是.exe文件,菜鸟教程里说.out,不应该是linux的.out文件吗?
A:在C++编程中,当你编译一个程序时,编译器会生成一个可执行文件。这个文件的扩展名取决于你使用的操作系统和编译器。
-
在Windows操作系统下,使用Microsoft Visual C++或其他兼容的编译器编译C++程序时,生成的可执行文件通常具有
.exe
扩展名。这个扩展名代表“executable”(可执行文件),是Windows系统下可执行文件的默认扩展名。 -
而在Unix-like系统(如Linux或macOS)下,使用g++等编译器编译C++程序时,生成的可执行文件通常具有
.out
扩展名(尽管这可以通过编译器选项进行更改)。在这个上下文中,.out
并没有特别的含义,它只是一个常见的默认扩展名,用于表示编译后的输出文件是可执行的。
需要注意的是,这些扩展名并不是绝对的。在不同的编译器或构建系统下,你可以通过配置来更改生成的可执行文件的扩展名。
在Cygwin里使用gcc编译C++程序时,输出的确实是.exe
文件,而不是Linux下的.out
文件。这是因为Cygwin虽然提供了一个Unix-like的环境,但它仍然是运行在Windows操作系统上的。
当你使用gcc编译程序时,gcc会生成一个可执行文件。在Windows上,可执行文件的默认扩展名是.exe
,这是因为.exe
扩展名在Windows上被识别为可执行程序。而在Linux或Unix-like系统上,可执行文件的默认扩展名通常是(无扩展名)
或者.out
,但这可以通过编译器选项进行更改。
不过,在Cygwin中,由于它要模拟Unix-like环境,同时又要兼容Windows的文件系统,所以gcc编译器被配置为生成.exe
扩展名的可执行文件。这样,你就可以在Cygwin环境中直接运行这些.exe
文件,而无需担心Windows和Unix-like系统之间的兼容性问题。
所以,虽然你在Cygwin里看到的是.exe
文件,但它实际上是在Unix-like环境下运行的,只是为了兼容Windows的文件系统而使用了.exe
扩展名。
Q:unixlike是啥
A:“Unix-like”这个词是指一类操作系统,它们模仿Unix操作系统的设计和功能哦。虽然它们并非直接基于AT&T Unix代码,但采用了Unix的设计理念和一些核心特性,比如多用户能力、多任务处理、支持多种程序语言和强大的命令行界面。
常见的Unix-like操作系统有Linux、BSD(比如FreeBSD、OpenBSD、NetBSD等)以及macOS。这些系统都在一定程度上继承了原始Unix的特性,并且都在一定程度上遵守POSIX规范呢。
Unix-like系统广泛应用于服务器、工作站、嵌入式设备等领域,是计算机科学和技术领域的重要组成部分。
编译:$ g++ helloworld.cpp -o aaa 或 $ gcc main.cpp -lstdc++ -o aaa,没有-o指定可执行程序的文件名,编译器采用默认的 a.out(windows下cygwin里是a.exe),如果像这样-o指定了,就会生成aaa.exe文件。(其中'-lstdc++'是一个链接器选项,它告诉编译器在编译时链接标准C++库)(cmd也一样可以执行。但都需要在cpp文件的目录下)
运行可执行aaa.exe文件:$ ./aaa
讲的真烂,“如果是多个 C++ 代码文件,如 runoob1.cpp、runoob2.cpp,编译命令如下”,坑了我好久
Q:Vs一个项目里,源文件和资源文件
A:在Visual Studio项目中,源文件和资源文件扮演着不同的角色,但它们共同构成了完整的程序。
源文件:这些文件通常包含代码,比如.cpp
(C++源文件)和.h
(头文件)。源文件是程序的“大脑”,包含了程序的逻辑和功能实现。你编写的C++代码就主要放在这些文件里。
资源文件:这些文件则包括图像、图标、音频、视频等媒体资源,以及可能的一些配置文件。资源文件是程序的“外貌”,用于程序的用户界面和交互,让程序看起来更美观、更易于使用。
源文件和资源文件在项目中是分开管理的,但它们在编译时会被整合到一起,生成最终的可执行文件
Q:我跟着教程学,发现源文件里有一个.cpp文件,资源文件里也有一个.cpp文件,且两个.cpp文件都有哦main,但报错了,说mian已经在main.obj里定义了,obj又是啥
A:看来你在学习C++的过程中遇到了一个小难题!让我来帮你解释一下这个错误。
首先,'main'函数在C++程序中是独一无二的,它是程序的入口点。其他cpp文件不会单独执行。也就是说,一个C++程序只能有一个'main'函数。如果编译器在链接时发现多个'main'函数,它就会报错,就像你遇到的那样,说'main'已经在'main.obj'中定义了。
'.obj'文件是编译过程中生成的一个目标文件,它包含了编译后的机器代码。在Visual Studio这样的IDE中,当你编译一个C++项目时,编译器会先把每个源文件(.cpp文件)编译成对应的.obj文件,然后再把这些.obj文件链接成一个可执行文件。
所以,报错的原因很可能是你的项目中包含了多个定义了'main'函数的源文件。你需要检查一下你的项目,确保只有一个源文件定义了'main'函数。
Q:obj是不是就是codeblock里的.o文件
A:没错!'.obj'文件和CodeBlocks中的'.o'文件其实是一回事,它们都是目标文件,包含了编译后的机器代码。
Q:Vs可以同时打开两个项目吗?为啥我只能看到最后打开的一个项目啊?
A:参考博客
Q:Vcxproj和sln区别
A:在Visual Studio中,'.vcxproj'和'.sln'文件都扮演着重要的角色,但它们的功能和用途是不同的。
'.vcxproj'文件是一个XML格式的项目文件,它包含了项目的所有配置信息。这些信息包括项目的源文件列表、编译设置、链接器设置、调试设置等等。简而言之,'.vcxproj'文件就是项目的“蓝图”,它告诉Visual Studio如何构建和编译你的项目。
而'.sln'文件则是一个解决方案文件。一个解决方案可以包含一个或多个项目,以及这些项目之间的依赖关系。'.sln'文件用于组织和管理你的项目,特别是当你有一个大型项目,需要将其拆分成多个子项目时,'.sln'文件就非常有用了。通过'.sln'文件,你可以轻松地在一个IDE窗口中打开和管理多个项目。
所以,'.vcxproj'文件和'.sln'文件是相辅相成的。'.vcxproj'文件关注于单个项目的配置和构建,而'.sln'文件则关注于多个项目之间的组织和管理。
Q:sln就是一个大项目,vcxproj就是其中的一个小功能项目蓝图对吧?
A:你的理解非常接近了!'.sln'文件确实可以看作是一个大项目,它包含了多个子项目(每个子项目都由一个'.vcxproj'文件来定义)以及这些子项目之间的依赖关系。而'.vcxproj'文件则是每个子项目的详细蓝图,包含了项目的配置信息、源文件列表、编译和链接设置等。
所以,'.sln'文件是项目的“总指挥”,它负责组织和协调各个子项目;而'.vcxproj'文件则是每个子项目的“执行者”,它负责具体的构建和编译工作。
这个比喻很生动,有助于理解这两个文件的关系。你还有其他关于Visual Studio项目文件的问题吗?
你搁着抛砖引玉呢?就不能像我一样解释的清楚些吗?!
为了练习这句话: 如果是多个 C++ 代码文件,如 runoob1.cpp、runoob2.cpp,编译命令如下 特意搞了两个cpp文件,都是输出“hello”,但发现不行,一个项目里只能有一个main,那就把两个cpp复制到一个文件夹下,cygwin命令行执行,但报错说有两个main也不行,唉这菜鸟教程我真服了,通过文心GPT摸索老半天(注意:为了节约时间,我直接放试验过的最终可行代码,因为我发现GPT很大一部分作用就是 抛砖引玉 ,GPT很多解释的不太对(但又比CSDN和博客园的完全错误的博客好太多),但GPT又能很好的追问清楚)
Q:解决方案什么意思
A:解决方案(Solution)通常是一个项目集合的概念,它可以包含多个项目(Project),这些项目之间可能存在一定的依赖关系。在Visual Studio中,解决方案通常用于组织和管理大型软件开发项目中的多个子项目和组件。
Q:external啥意思
A:extern
关键字在C++中可是个挺有用的家伙!它用于声明一个变量或函数是在其他地方定义的。简单来说,就是告诉编译器:“嘿,编译器大佬,这个变量或函数我稍后会在其他地方给你展示它的真面目,你先别急着报错哦!”
好难受啊,好多好多问题,看一句就有一堆问题,看一句就有一堆问题。
Q:为啥g++ a.cpp 只生成exe文件,不生成.o文件
A:确实,在C++的编译过程中,编译器会先将源代码编译成目标文件(.o文件),然后再由链接器将这些目标文件链接成最终的可执行文件。但是,这里有一个常见的误解需要澄清一下。
当你使用g++直接编译单个源文件时(比如g++ a.cpp
),编译器其实会自动完成编译和链接这两个步骤,生成可执行文件。在这个过程中,编译器确实会生成.o文件,但这个.o文件是临时的,编译器在链接完成后通常会将其删除,所以你可能看不到它。这就是为什么你只看到了exe文件而没有看到.o文件的原因。
换句话说,即使没有显式地生成.o文件,编译器也会自动进行编译和链接,生成可执行文件。这是因为在使用g++编译单个源文件时,编译器默认执行了编译和链接两个步骤。
Q:我可以在 cmd 执行 a.exe,但cygwin里a.exe就不行。
A:cmd
和Cygwin
是两种不同的命令行环境,它们处理可执行文件的方式也有所不同。
cmd
是Windows操作系统自带的命令行工具,它直接运行在Windows内核之上,可以很方便地执行Windows下的可执行文件(比如.exe
文件)。当你在cmd
中输入a.exe
时,如果a.exe
文件在当前目录或者系统的PATH环境变量所指定的目录中,cmd
就可以直接找到并执行它。
而Cygwin
则是一个在Windows上提供类Unix环境的软件包,它模拟了Unix的许多特性,包括命令行界面、文件系统结构等。在Cygwin
中,虽然你也可以执行Windows下的可执行文件,但是需要指定完整的路径或者使用不同的命令来执行。在Unix环境中,通常不会直接执行.exe
后缀的可执行文件,cygwin对于环境变量和路径的解析与Windows有所不同。
在Unix和类Unix系统(比如Linux、macOS,以及在Windows上运行的Cygwin)中,'./'
是一个常见的路径表示方法,它表示“当前目录”,只a.exe不行。
然而windows的cmd里没有'./'这东西,直接a.exe就行,默认在当前目录执行,想测试cmd里的 '.' 命令直接只输入这个是不行的,会说不是内部命令,不是内部命令,'.'可以表示是相对路径,即针对当前路径来说,.
应该用作路径的一部分来引用当前目录中的文件或目录。'./qqq.exe'也不行,无法识别,Windows的cmd
中,.
更多地是在脚本或批处理文件中使用,或者在需要明确指定路径的上下文中使用。比如,在编写批处理文件时,你可能会使用.\
来确保路径是相对于当前目录的,而不是相对于某个其他目录。
但是,请记住,在Windows的cmd
中,直接输入文件名通常就足够了,
别纠结 './' 了
Q:静态函数static
A:只有这个文件里可以用
Q:g++ a.cpp b.cpp顺序?
A:使用g++一次性编译多个源文件时(如g++ a.cpp b.cpp
),g++会自动帮你处理好这些依赖关系,确保正确的编译顺序。因此,在这种情况下,你不需要手动指定源文件的编译顺序。但如果说a.cpp需要调用b.cpp里的函数,逻辑上是应该:
g++ -c b.cpp -o b.o
g++ -c a.cpp -o a.o
g++ b.o a.o
伙伴!你问到的g++ -c
和g++
这两个命令啊,它们在C++编译过程中扮演着不同的角色呢!
-
g++ -c
:- 这个命令的作用是只进行编译(compile)过程,不进行链接(link)过程。
- 当你使用
g++ -c
时,它会将你的C++源代码文件(比如main.cpp
)编译成目标文件(object file),通常是一个.o
文件(在Windows上可能是.obj
文件)。 - 目标文件是二进制格式的,包含了机器代码,但还不是最终的可执行文件,因为它还没有和其他库文件或目标文件链接在一起。
-
g++
:- 当你直接运行
g++
(后面跟上源代码文件名)时,它会默认执行编译和链接两个过程。 - 也就是说,它首先会将你的源代码编译成目标文件,然后自动查找并链接必要的库文件,最终生成一个可执行文件。
- 这个可执行文件可以直接在操作系统上运行,前提是它依赖的所有库都已经正确链接。
- 当你直接运行
总结:
g++ -c
只编译不链接,生成目标文件。g++
既编译又链接,生成可执行文件。
g++ -c b.cpp -o b.o
和g++ -c a.cpp -o a.o
命令,分别是在编译b.cpp
和a.cpp
为对象文件(.o
文件)。
1 #include <iostream> 2 using namespace std; 3 void my(); 4 int main() 5 { 6 // my(); 7 cout << "这样写没问题" << endl; 8 9 } 10 11 #include <iostream> 12 using namespace std; 13 void my(); 14 int main() 15 { 16 my(); 17 cout << "会报错:undefined reference to `my()`" << endl; 18 19 }//意思是找不到函数的定义,叫未定义 20 //没报错error属于链接问题,找不到所有需要的对象文件和库。 21 22 23 24 25 #include <iostream> 26 using namespace std; 27 void my(); 28 int main() 29 { 30 a=2; 31 //这个会报错,error: 'a' was not declared in this scope,叫未声明 32 } 33 34 35 36 #include <iostream> 37 using namespace std; 38 void my() 39 { 40 return; 41 } 42 int main() 43 { 44 my(); 45 cout << "这样写没问题" << endl; 46 47 }
感觉好舒服,补了一下之前刷题没考虑过的很多细节。
Q:Vs里ctrl+f5到底执行的是哪个文件?源文件还是资源文件

1 在Visual Studio中,当你按下Ctrl+F5时,你其实是在告诉Visual Studio编译并运行当前选中的项目或解决方案,而不是直接执行某个特定的源文件或资源文件。 2 3 编译过程会处理项目中的所有源文件(.cpp文件等),生成可执行文件(.exe文件)。这个过程中,编译器会检查源文件中的代码,将其转换成机器语言,并链接必要的库文件,最终生成一个可以运行的可执行文件。 4 5 资源文件(如.rc文件)在项目中也扮演着重要的角色,但它们包含的是非代码资源,如图标、位图、字符串表等。这些资源在编译过程中会被处理,并嵌入到最终的可执行文件中。然而,它们并不会被直接执行;相反,它们是在程序运行时被程序加载和使用的。 6 7 所以,当你按下Ctrl+F5时,Visual Studio会编译项目中的所有源文件和资源文件,生成可执行文件,并运行这个可执行文件。你看到的程序运行结果,其实是可执行文件运行的结果,而不是直接执行源文件或资源文件的结果。
关于调用,main.cpp里:
#include <iostream> extern void my(); int main() { std::cout << "A" << std::endl; my(); return 0; }
MyFirstProgram.cpp里:
#include <iostream> void my() { std::cout << "S" << std::endl; }
A:extern
在C++中可是个好东西,它就像是一个“跨文件链接器”,让我们可以在一个文件中声明并使用另一个文件中定义的变量或函数。###:文心GPT:(但回答速度真的好慢,且切换页面就会停止)
###:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律