VisualStudioCode如何编写运⾏C、C++程序?
0. "code-runner.runInTerminal": true, // 设置成false会在“输出”中输出,⽆法输⼊
"utorMap": {
"c": "cd dir && gcc 'fileName' -o '' -Wall -g -O2 -static-libgcc -std=c11 -fexec-charset=GBK && &'
dir$fileNameWithoutExt'",
"cpp": "cd dir && g++ 'fileName' -o '' -Wall -g -O2 -static-libgcc -std=c++17 -fexec-charset=GBK && &'dir fileNameWithoutExt′"//"c":"cd dir && gcc fileName− -Wall -g -O2 -static-libgcc -std=c11 -fexec-
charset=GBK && dir fileNameWithoutExt",
// "cpp": "cd dir && g++fileName -o $ -Wall -g -O2 -static-libgcc -std=c++17 -fexec-charset=GBK && dir fileNameWithoutExt"
怎样写代码 自己做编程}, // 右键run code时运⾏的命令;未注释的仅适⽤于PowerShell(Win10默认),⽂件名中有空格也可以编译运⾏;注释掉的适⽤于cmd(win7默认),PS和bash也能⽤,但⽂件名中有空格时⽆法运⾏
"code-runner.saveFileBeforeRun": true, // run code前保存
"code-runner.preserveFocus": true, // 若为false,run code后光标会聚焦到终端上。如果需要频繁输⼊数据可设为false
"code-runner.clearPreviousOutput": false, // 每次run code前清空属于code runner的终端消息,默认false
"code-runner.ignoreSelection": true, // 默认为false,效果是⿏标选中⼀块代码后可以单独执⾏,但C是编译型语⾔,不适合这样⽤"imTrailingWhitespace": true, // 保存时,删除每⼀⾏末尾的空格
"files.insertFinalNewline": true, // 保存后⽂件最末尾加⼀整⾏空⾏,Linux下的习惯
"files.autoGuessEncoding": false, // 启⽤后,会在打开⽂件时尝试猜测字符集编码。我关闭的理由见6,默认也是禁⽤的"lorTheme": "One Dark Pro", // 主题
"lorCustomizations": {
"activityBar.foreground": "#39C5BB" // ⾃定义颜⾊;想定义其它位置参见官⽅⽂档
},
"workbench.settings.useSplitJSON": true, // 恢复⼿动编辑时的两列设置
"Level": 0.2, // 整体放⼤
"abled": false, // 如果你不⽤git,可以考虑关闭它
"git.ignoreMissingGitWarning": true, // 同上
"[c]": {
// "ding": "gbk" // 这样的格式可以对指定后缀的⽂件应⽤设置,如果你实在想⽤gbk,就这样设置吧。cpp同理。
},更纱⿊体是楼下B神做的字体,特点是标点好看(误):be5invis/Sarasa-GothicConsolas虽然是Windows⾃带字体中还算⾏的,但它只有英⽂字体;微软雅⿊虽然是⾮衬线字体,但它不是等距的,这⼀点⾮常不适合编程,等线也不等距;中易宋体……告辞。不下新的字体,其他两⼤系统我不清楚,
Windows下简直没有编程可⽤的字体。Consolas加雅⿊嘛,也还⾏吧,不过能⽤更好的⼲嘛不⽤呢。6. 关于中⽂和乱码VS Code输出中⽂会出现乱码,很多⼈都遇到过。这是因为源代码默认是UTF-8编码,cmd/PowerShell是GBK编码。直接编译,会
把“你好”输出成“浣犲ソ”。Linux就没有这个问题。⼀种解决⽅法是⽤gcc,编译时⽤-fexec-charset=GBK这个参数(⽬前的配置是有的),⽣成的程序就是GBK编码的,源⽂件仍是UTF8。⽽clang的execution-charset supports only UTF-8,所以⽤clang就⽆解。另⼀种⽅法是⽤宽字符输出,有点复杂,见:C语⾔与中⽂的⼀些测试 (Win, UTF8源码) 。此⽂也提到了chcp 65001的事。直接修改⾮Unicode程序的语⾔为UTF8(beta)会导致所有⽤GBK的程序乱码,这是不可接受的。当然,如果你不打算坚持⽤UTF8作为源代码的编码,那直接⽤GBK编码也⾏。如果是打开已有的以GBK编码的⽂件,VS Code默认会以UTF-8编码打开(除⾮你设置了猜测编码),这样编辑器内的中⽂就会乱码,此时要点右下⾓的GBK,选“通过编码重新打开”,选UTF-8即可。那为什么不打开⾃动猜测编码呢?可以参见我的这个回答:VS Code 中⽂注释显⽰乱码怎么办?。如果你不担⼼,那就开吧。如果把代码⽂件发给其他⽤Windows的⼈,最好转成GBK,否则别⼈⽤记事本打开有可能会乱码(1803后的记事本改善了⼀些,联通已经不会乱码了)。对于调试,⽆论怎么做,gdb都⽆法调试路径中存在中⽂的程序。这个貌似是gdb的bug,但是优先级极低:[gdb] cannot not open source file with Chinese/Unicode characters in path when debugging · Issue #602· microsoft/vscode-cpptools总之,
对于Windows,这些问题没什么好办法,因为本⽂⽤的这⼀套就是从Linux搬过来的。⽤Linux应该就没有这些问题了。7. 不到头⽂件的错误gcc不在Path⾥。回去看上⾯的验证那⼀步⼿动配置了c_cpp_properties.json且包含的路径不正确。如果没有创建此⽂件就不⽤管重启试试如果你保证这⼏点都符合要求,那我也没什么好办法……要不就换其它答主的教程吧。注意这句话是终极Fallback,如果你确信你没有操作错误,那就不⽤问我了,我是⽆法解决的。另⼀种不到头⽂件的错误:这种情况是因为clang的默认target为msvc,需要加--target=x86_64-w64-mingw这个参数才⾏。这个默认target是写死在源代码⾥的,我了⼀圈没到正常修改办法。下载clang的源代码,⾃⼰改掉,再编译clang本⾝,也许可以解决。或者装Windows SDK⽽不使⽤mingw,这样就符合默认target了。当然这个时候最简单的办法就是⽤gcc编译。12. 在Win下使⽤clang其实这部分本来是本⽂的主打部分的,但是确实会引⼊太多概念,⽽且效果也不是那么好(因为没有libc++),现在全都放在这⾥变成可选内容。其实我更推荐⽤WSL(⼜但也许这样会从⼀个坑跳到另⼀个坑),本部分仅留作踩坑经验。Q:为什么要装Clang?A:错误提⽰更友好。以及:Clang ⽐ GCC 好在哪⾥? Q:Clang怎么读?A:正确答案是/ˈklæŋ/,即c 发"可"的⾳;不过实际还是以双⽅都理解为基础,⽐如平常把SQL说成circle也是能理解的。Q:为什么既要装Clang⼜要装MinGW?A:因为Win下的Clang没有libc++。你也可以选择装VS⽤Windows SDK,就不需要MinGW了,这个更官⽅⼀些,但体积较⼤。Q:MSVC integration install failed / unable to find a Visual A:就是上⼀条的原因,Clang默认⽤的是MSVC的后端。但本部分⽤的是MinGW,所以就不⽤管这个提⽰。要不就装Windows SDK环境LLVM
Download Page:在此页⾯下载Clang。选 Pre-Built Binaries 中的Windows (64-bit),不需要下.sig⽂件vscode-clangd:提供Intellisense和Lint功能;仓库及⽤法见:clangd/clangd C/C++ Clang Command Adapter:本⽂曾⽤过,vscode-clangd出现问题时可以考虑换成这个试试;配置有⼀些不同,需要改clang.cflags;如果没出问题就别装了Clang-Format:只有想⾃定义代码风格时才装,⽐如⼤括号是否换⾏。需要另外学习如何使⽤CodeLLDB:lldb的vscode扩展,需要Python 环境;我没⽤过配置编译命令加⼀句--target=x86_64-w64-mingw。clang的默认target为msvc,不加就会不到头⽂件
Squiggles、C_Cpp.autocomplete、C_Cpp.suggestSnippets都关掉,否则会跟clangd报的重复其实就是设定那些编译选项,基本上⽤-Wall和--target=x86_64-w64-mingw就⾏。clangd只会使⽤离要评估的⽂件最近的⼀个。因为需要保证有--target,最好创建⼀个放到⼯作区磁盘的根⽬录⽤作fallback。但⽐较坑的是,C和C++都会使⽤.h作为头⽂件,如果不加任何std,.c
和.cpp能正确lint,但是.h会使⽤C的模式。对于fallback来说感觉没什么好办法。还是那句话,要不就装Windows SDK。13. 我编写代码的体验体积上,本体+编译器+扩展,如果只是⽤来写C,硬盘占⽤并不算⼩,上1G了。内存占⽤还是⽐较少的(0.5g左右);曾经出过吃⼤量内存的bug,当然现在早就修好了。VSC的第⼀优势也许是好看?虽然不是专门为C/C++设计的,但它应该是现在最现代化的
纯⽂本编辑器了。⽽且光Lint这⼀点就⽐wintc、cfree、dev c++强了很多了,更别提dev c++⾃⼰的Debug功能就有bug。其它IDE,CodeBlocks还活着,虽然历史包袱⾮常明显。Clion界⾯美观,功能也挺强,不过只有英⽂,刚上⼿⽤起来可能有点困难;学⽣可以免费申请key,否则收费。如果想⽤Windows SDK,下个Visual Studio (Installer),Community版勾上C++桌⾯开发就是,这样就符合Clang的默认Target了,但我觉得还不如直接⽤VS。其它答主对⼀些C的IDE的评价可以看这个回答:毫⽆编程基础的⼩⽩准备学习C语⾔,⽤VC6还是VS2015?。我还有⼀点想对学⽣党说:能⾃⼰百度到这篇⽂章,努⼒去看懂、动⼿配置,已经⽐贴吧⽆数伸⼿党和等着⽼师在qq⾥发IDE的⼈强了很多了。如果有能⼒,还是建议你们读读VSC的⽂档:Documentation for Visual Studio Code,并不复杂,体验⼀下英语的实际应⽤也不错哦。A. ⼀些其它可能出现的错误如果你只写了个hello world,不加任何断点,按f5以后⿊框框⼀闪⽽过/闪退是正常现象。想让程序暂停运⾏可以在末尾加上⼀个或两个getchar();,不明⽩为什么有时要⽤两个?去问你们C语⾔⽼师;或⽤system("pause"),或加断点,或者launch.json⾥⽤内置终端(externalConsole false)。如果你硬要⽤外置终端且要什么都不做,就想运⾏后暂停在那⾥,那么VSC办不到,⾄少我的配置办不到,我也不想研究,因为我⽤内置终端。preLaunchTask“Compile”已终⽌,退出代码为 1:编译有error并且你⽤的是F5运⾏的就会有这个提⽰;如果你点仍然调试,就会调试上⼀次编译成功的⽂件。其实所有的编译失败都会触发这个错误,出错的返回值是1难道不是常识?所以仅仅告诉我出现了这个提⽰根本没⽤,它的意思就是出错了,没有⼈能看出原因,原因在“终端”⾯板⾥。如果Hello World能正常调试运⾏,但某个其它代码出现这个
错误,很可能是你⾃⼰代码本⾝有错误。终端将被任务重⽤,按任意键关闭:听过“按任意键继续”吗?这句话就是这个意思。这句话⽐上⾯那个退出代码为1还要没⽤,它根本就不包含任何有效信息,⽆论成功还是出错都会显⽰它,它就是⼀个说明性的⽂字。⽆法打开...,不到⽂件(file:///build/glibc-OTsEL5/glibc-2.27/...):我在Linux下遇到了这个问题,看起来应该是你试图step in⼀个库函数,但是没有源代码。解决办法是下⼀个glibc放到指定位置。或者参见这个:Disable "Unable to open file" during debug · Issue #811 ·Microsoft/vscode-cpptools。undefined reference to xxx ... linker command failed:调⽤了未声明的函数。可能是函数名打错了,或者没有include头⽂件。总之是你⾃⼰的代码有错误。ld: cannot open output file ... permission denied:原程序仍在运⾏(⽐如死循环),⽆法被覆盖所以⽣成失败。任务管理器结束那个进程即可。MinGW下,监视(Watch)窗⼝⾥⽤strcmp,会导致gdb崩溃退出,原因不明。linux下正常。重命名⽂件后,原来已有的Lint还会在问题栏⾥;修改了⽂件后断点可能会失效。以及还存在⼀些其他的像这样的⼩bug,⼀般关掉VSC再开就⾏。此配置⽆法使⽤Bash for Windows或WSL,因为bash中的反斜杠会被识别为换⾏。cpptools现为launch.json提供了⼀个Bash on Windows Launch的snippets。现在⼜出了⼀个Remote WSL。但这些我都没有试过如何使⽤。如果你要进⾏调试,不要开优化。gcc⽤-Og还可以保留⼀些调试信息,但clang⽤了以后就不能⽤gdb调试了。即使如此我还是在某⼀次写代码的时候遇到了⽆法跳⼊函数的问题,⽽VS可以跳⼊。vscode-clangd第⼀次⽆法正确检测到printf和scanf还有realloc,但是代码中⽤过⼀次以后就好了。我也不知道为什么。此时不应有 &:终端改为⽤PowerShell或者code runner的exec
utorMap⽤我注释掉的那两条命令。具体看上⾯settings.json的说明。crt0_c.c:(.text.startup+0x2e): undefined reference to `WinMain':没有main函数,或者把main写成了mian。在Win下⽤
clang+mingw,#include <bits/stdc++.h>会报'float.h' file not found,改成g++后就好了。我觉得这应该是库的bug,反正我是不知道怎么解决。B. 如何添加环境变量图形化的⽅式:右键“此电脑”,选属性;或者按win+PauseBreak。选左边的⾼级系统设置,⾼级,环境变量。选上⾯那⼏个条⽬中的Path,编辑,新建。然后把含有⽬标exe的⽂件夹路径填进去。例如gcc在C:\mingw\bin\gcc,就填C:\mingw\bin,Win ⼤⼩写不敏感。命令⾏的⽅式:打开cmd或者PS,setx /m path "%path%;C:\mingw\bin" 。此命令⽆需管理员权限,且不会随着终端退出⽽退出(就是和上⾯图形化的效果⼀样)。如果还不知道怎么修改,可以⾃⼰百度或者b站搜“环境变量”看视频。⼤多不是C的但是区别不⼤,⼩⼼别错删了就是。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。