为什么没有装vs不能vs显示代码行2的8次幂

著作权归作者所有商业转载请聯系作者获得授权,非商业转载请注明出处

本文面向初学者,但是不适合还在学写Hello World级别的初学者阅读本文能在一定程度上了解程序编譯的知识,以及使用VS Code的知识

本文大部分内容都可从VS Code官方文档: 以及各个扩展的文档中获得,并且他们还会进行更新(本文也进行过几次偅大更新)如果你想更深入了解,可以去看其实本文基本上是由不断地尝试得出来的,如果有错误可以指出

我的环境:64位Windows 10。32位Win在某些地方需要修改不过本文没有提;Linux下也有许多不同,仅供参考

最终效果:实时vs显示代码行编译阶段的错误、格式化代码、进行单文件嘚编译与调试。

如果你确定不需要使用别人的库则现在的版本不需要创建这个文件了,扩展会自动使用默认的设置

如果你自己编写了頭文件又不在workspaceFolder下,或是使用别人的库路径就要加到includePath和browse里(不过还有别的操作要做,见下一大点的多文件编译)如果需要递归包含,末尾加/**

此文件内容来自于;这个json不允许有注释(其实按照标准本来就不能有)

Windows下的目录分隔符为反斜杠,原本应使用两个反斜杠来转义泹直接用斜杠在VS Code中也接受。

为什么要往json里写这么多的东西因为VSC本身并没有对C语言特别优待,对其他许多语言也是这样另外稍微提一下,以$开头的是VSC预定义的变量具体参见:。

3. 写代码编译,调试

新建文件后就可以写代码了c语言源代码后缀是.c,c++是.cpp或.C或.cxx(这也要我教吗……)代码文件在保存工作区内都可以,可以自己建立文件夹不必放到.vscode文件夹里。但是还是前面的话不要含有中文和空格和引号,吔不要有像&这样的特殊符号;不然试试用rm删除一个叫做-rf的文件

按Alt+Shift+F(或者右键菜单)可以格式化代码。出现Intellisense的时候按tab可以补全代码

停止輸入一小段时间(一秒)后就会有Lint,扩展会给一些建议性的warning(比如声明了变量但不使用)自己清楚就行。如果觉得不爽也有方法不让咜提示,比如去掉-Wall就会少一些如果还想去掉更多的警告,自己找怎么做我提示一下:-Wno-...。找好参数后加到clang.cflags、clang.cxxflags和tasks.json的args里

按ctrl+shift+B单纯编译,按F5为運行并调试(运行前会自动编译);本来ctrl+F5为运行但不调试但是在cpptools暂不支持,还是会调试Follow:

在写程序初期,我强烈建议不要把f5当作编译来使用因为有的bug只会产生警告,不会阻止编译但这些东西越早期解决越好。编译信息会在底下的“终端”面板里如果代码有错误,点進去可以看clang报的信息但因为有Lint了,所以可以轻松很多

加断点在列号前面点一下就行,如果想从一开始就停下来可以加在main函数那里,戓者launch.json中设置"stopAtEntry": true按f11可以一步一步进行,箭头所指的那行代码就是下一步要运行的代码左边有个调试栏,可以看到变量的值,自动栏没有的可鉯手动添加表达式;把鼠标放到变量上可以看到变量的值但是只能识别简单的表达式;栈帧对于观察递归很有用;在某些时候还可以抓取“异常”。

想在自带的终端里进行调试见:。此功能应该已经实现了不过我不打算用,所以就没管

快捷键:。英文文档中当然有赽捷键的信息还有Cheet Sheet可以看,而且英文文档会更新这个单独列出来还是给初学者吧。

如果你不需要调试可以直接右键选run code,或者点右上角的播放按钮如果在终端里运行,可以输入数据但是少了vs显示代码行时间的功能;在“输出”中则上面两项相反。

用它还可以在非工莋区内编译运行程序但executorMap记得放到全局设置里。在终端中按ctrl + c可以终止程序运行

如果按照我的配置,task和code runner还有一点不同的是working directory前者是你打开嘚文件夹,后者是文件所在的文件夹当然它们也都可以自己修改。

其实Code Runner只是代替你手动输命令功能并不强,算是适用场景不同吧不偠以为run code跑个Hello World很简单,Code Runner就很强前面那么多配置都是垃圾了。

另外楼下的答主韩骏就是此插件作者,有事统统找他(滑稽)

如果你想进荇少量的多文件编译,对于c语言请使用clang(gcc)把所有文件编译成.o的中间代码再用clang++(g++)链接.o文件,(为了方便)并把这些命令写进批处理中;这个操莋门槛非常低如果不会,百度gcc使用教程

如果你想进行大量的多文件编译,请学习如何写makefile或使用cmake而配置Intellisense需要修改那几个JSON。

如果你想使鼡别人的库比如ffmpeg,可能需要在命令中指定-I-l(小写的L)、-L以及阅读那个库的文档。总之这个VSC无关不用VSC,或是用其它IDE或是手动编译┅样的会遇到这些问题。自行去解决

这些情况下可以考虑单独建一个工作区,不要和单文件编译的共用其实不用新建工程(Project),只是单文件就能调试是不利于以后使用和理解大型IDE的,不要觉得建工程很麻烦、单文件很强就是了

如果你用VSC还做别的事(比如写前端),或者囿不止一个工作区可以创建一个快捷方式(右键新建),把工作区路径作为参数传给VSC主程序还可以加个图标。这操作不难记得打双引号就行。1.18有了一个窗口多个工作区的功能“文件”菜单里也有“保存工作区”这个功能,但是我没试过

  • 如果你只写了个hello world,不加任何斷点按f5以后黑框框一闪而过是正常现象。想让程序暂停运行可以在末尾加上一个或两个getchar();不明白为什么有时要用两个?去问你们C语言老師;或用system("pause")或加断点
  • 如果你要进行调试,不要开优化gcc用-Og还可以保留一些调试信息,但clang用了以后就不能用gdb调试了即使如此我还是在某一佽写代码的时候遇到了无法跳入函数的问题,而VS可以跳入
  • 重命名文件后原来已有的Lint还会在问题栏里;修改了文件后断点可能会失效。以忣还存在一些其他的像这样的小bug一般关掉VSC再开就行
  • preLaunchTask“Compile”已终止,退出代码为 1:编译有error并且你用的是F5运行的就会有这个提示有warning是否会触發不清楚;如果没有error,点仍然调试就行了;如果有error你还点仍然调试就会调试上一次编译成功的文件。有一种原因是原程序仍在运行无法被覆盖(比如死循环),终端里报错为permission denied任务管理器结束那个进程即可。但其实所有的编译失败都会触发这个错误出错的返回值是1难噵不是常识?所以仅仅告诉我出现了这个提示根本没用因为它的意思就是出错了,没有人能看出原因这也是为什么我要强烈建议不要紦F5当作编译来使用,按F5出了问题我根本看不出是编译期有问题还是调试期有问题,或是你自己的代码有问题

我的一些其他的设置用在铨局settings.json里,根据自己的情况调整不需要全部照着我的写。写完一个以后要打逗号

现在的VSC用的是可视化的设置界面,其实原本是手动编辑苴出现两列设置的点击右上角那个花括号就能手动编辑。

// "files.encoding": "gbk" // 这样的格式可以对指定后缀的文件应用设置如果你实在想用gbk,就这样设置吧cpp同理。

更纱黑体是楼下B神做的字体特点是标点好看(误):

Consolas虽然是Windows自带字体中还算行的,但它只有英文字体;微软雅黑虽然是非衬线芓体但它不是等距的,这一点非常不适合编程等线也不等距;中易宋体……告辞。不下新的字体其他两大系统我不清楚,Windows下简直没囿编程可用的字体Consolas加雅黑嘛,也还行吧不过能用更好的干嘛不用呢。

VS Code输出会出现乱码很多人都遇到过。这是因为VS Code内部用的是utf-8编码cmd/Powershell昰gbk编码。直接编译会把“你好”输出成“浣犲ソ”。如果把cmd的活动代码页改成65001会出现汉字只能vs显示代码行一半的问题,而且怎么修改荿UTF8还是个问题(这个可以参见楼下

同学的测试)Linux就没有这个问题。

Code的“输出”中就是正常的如果想解决这个问题,可以百度“宽字符輸出”或者自己手动在cmd里用gcc加上上面那个参数编译一遍(可以写个批处理),或者就直接改成用gcc编译clang来lint算了。

如果是打开已有的以GBK编碼的文件VS Code默认会以UTF-8编码打开(除非你设置了猜测编码),这样编辑器内的中文就会乱码不过对于初学C的同学来说,写的代码一般只有紸释是中文此时要点右下角的GBK,选“通过编码重新打开”选UTF-8即可。GBKtoUTF8这个扩展理论上如果VSC检测出的是GBK编码的,它就会自动做“以UTF-8格式保存”这个操作;如果VSC没有检测出是GBK编码它就什么也不会做。但是貌似它有bug会把当前文件复制一遍插入到光标处,见所以不推荐使鼡。

如果你没有注意到一个GBK编码的文件被VSC以UTF-8的编码打开了又进行了保存,按照我的测试这文件里的中文应该是找不回来了。这个还是仳较危险的而且如果打开了编码猜测,VSC又猜错了的话……所以我是关闭编码自动猜测的中文特别少的时候猜错几率很大。

这样做了以後在含有中文的路径下可以编译,但是仍然不能调试所以还是把代码放到不含中文的路径中吧。如果把代码文件发给其他用Windows的人最恏转成gbk,否则别人用记事本打开有可能会乱码(不过貌似1709改进了记事本的编码猜测1803的下一个版本连LF都支持了)。

7. 找不到头文件的错误

有幾位同学遇到了路径设置正确编译也通过,但是“问题"面板里出现找不到头文件的error我也遇到过。这个error是cpptools报的可能的解决方法是把你需要的头文件的路径加到c_cpp_properties.json中,或者你的compilerPath没有设置正确如果还是解决不了,反正不影响编译就当做没看到算了。如果你遇到了又解决了鈳以留言告诉大家如果是非工作区选c语言或者c++,出现这个错误很正常因为不满足前提:路径设置正确(没有c_cpp_properties.json)。

还有一种可能看评論区BladLust同学的回复。

如果是这个错误这是因为clang的默认target为msvc,需要加--target=x86_64-w64-mingw这个参数才行这个默认target貌似是写死在源代码里的,反正我找了一圈是没找到正常修改办法下载clang的源代码,自己改掉再编译clang本身,也许可以解决或者装Windows sdk而不使用mingw,这样就符合默认target了参考第九点。当然最簡单的办法就是用gcc

  • 按照这样配置,长期编译代码下来肯定有一大堆的exe还可能分散在不同的文件夹里。你可以考虑修改一下json文件把生荿文件的目录指定到一个专门放exe的文件夹里(如果不会,百度gcc使用教程)或者资源管理器右上角搜索*.exe,就可以搜出它们或者写个bat删了。都很简单
  • json是一种数据交换格式,<del>大部分是JavaScript的子集</del>现在强行变成完全子集了数据冗余度小。VSC和各个扩展会读取json中的条目来决定某些功能的行为。这么多条目哪里来的呢这其实和API差不多。扩展开发者会把允许修改的选项“告诉”VSC各个扩展的安装页面都有写,VSC又有intellisense所以其实很容易写。如果是单纯使用json我觉得就算从来没有见过,边看边猜也能写个大概又因为扩展开源,你甚至可以去扩展的github页面和開发者聊天
  • 10,默认输入法只有一个微软拼音按一次shift就能进行中英转换,而为了保持兼容按ctrl加空格也能进行中英转换,而这个快捷键囸是强制触发Intellisense的快捷键所以,我强烈建议手动添加“英语”语言输入法写非前端代码时切换到纯英文输入法(win+空格)。这样也可以解決某些游戏需要用到shift键但是同样快捷键冲突的问题具体操作我就不说了,自己百度
  • tasks.json中的"problemMatcher":"$gcc"会解析终端中的错误提示,因为已经有Clang的Lint了僦不需要这个;如果用了Clang Command Adapter又打开这个,则会出现双重错误提示本来1.11就说可以写$gcc的,但当时其实并不支持现在早就能用了。不过如果要鼡非预设版本就需要自己写了。

9. 其他工具链的选择

  • 使用MinGW编译但仍用Clang提供Lint:tasks.json的命令行自己改一改code runner的命令行在settings.json里,自己改这样可以在终端中输出不乱码,参考第六点缺点:编译用的不是Clang,编译速度相对慢Lint可能提示的警告不全,比如Clang给出的"did you mean ..."提示Lint就可能捕获不到
  • configurations);另外两个json也要改,VS的编译器是cl参数也要改;调试器也许可以用VS的。不过这样我觉得也许还不如直接用VS而且我没试过
  • 如果以上都看不懂,鈳以试试这个配置好的(不过人家的配置方法和我的不一样):
  • 如果不想用VSC写了可以看看这篇问题:
  • codeblocks现在还活着,配置一番(虽然同样囿点折腾)也可用Clion界面美观,功能应该也挺强不过只有英文,刚上手用起来可能有点困难学生可以免费申请key,否则收费

10. 我编写代码嘚体验

体积上合并后的llvm文件夹占1.6g,vsc 0.2g加上一些扩展。如果只是用来写C体积占用并不算小。内存占用如果VSC不出bug,还是比较少的(0.5g左右)

VSC的第一优势也许是好看?虽然不是专门为C/C++设计的但它真的还有许多其它优点。光Lint这一点就比wintc、cfree、dev c++强了很多了更别提dev c++自己的Debug就有bug,還及其容易碰到

我还有一点想对学生党说:能自己百度到这篇文章,努力去看懂、动手配置已经比贴吧无数伸手党和等着老师在qq群里發IDE的人强了很多了。另外如果有能力我还是建议你们读读VSC的文档:,并不复杂体验一下英语的实际应用也不错哦。

有问题可以留言讨論不过最好详细一点描述。而且我再在这里说一次不要只告诉我“preLaunchTask已终止,代码为1”这一句话这句话没用。

原创非商业转载请注奣出处。

我要回帖

更多关于 先装数据库还是vs 的文章

 

随机推荐