在VSCode中写简单的C++程序

匿名 (未验证) 提交于 2019-12-03 00:29:01

毕业后终于有了一点空闲时间,可以来继续倒腾倒腾自己的电脑了。自然想起了微软大爷的一堆东西,便想先搞搞VSCode试试。
事出有因,作为一个编程小白,以前写程序都是用微软各版本的航母VisualStudio,虽说性能分析、语法纠错什么的蛮好用,但还是想再试着配置一下轻量级的编辑器,以为能加深自己对程序实现过程的理解吧。年少无知的时候折腾过Vim、Emacs、Atom、Editplus,但都不很如意。一方面是没有坚持下来长时间写程序,导致没有形成自己的习惯;另一方面也是因为平时更经常看用MATLAB,对编程的理解始终感觉不到位。
查到很多个配置方案并一个一个试过后,终于实现了用VSCode写程序的第一步。开始折腾!

关于编译器,据说:
1. 可以选择LLVM、MinGW64、Tdm-gcc等主流编译环境的其中一个。其中LLVM前端(词法、语法分析、语义分析、生成中间代码)使用的是clang,效率上优于后面三个所使用的gcc。(2018.3.)
2. 在 Windows 下安装 Clang 是一件不太愉快的事情,如果在安装时遇到困难,大可放弃安装 Clang ,转而安装 GCC。(2017.8.)
作为小白,尽管看了些讲LLVM和GCC区别的文章,但是并不能很好地体会到两者的区别。也看到很多配置里,将intelliSenseMode改为clang-x64,但是其command设置是g++,仿佛是将LLVM和MinGW64混合起来了一样。暂时没有搞懂,详情再看。
另外我发现,截止目前的LLVM已经将clang更新到6.0.0版本,对于Windows来说安装已经非常友好了。加上本来就安装好的MinGW64,我也打算把这两个都搞出来得了!

  • 编译器下载安装包还是压缩包无所谓,重点是要确认系统环境变量路径中有**\LLVM\bin**\MinGW64\bin这两个。个人感觉安装包似乎好管理一些。
  1. 下载好VSCode自然是必不可少的!直接在官网下载即可,支持开源。
  2. 也一定要下载好大家都说到的Microsoft官网的插件C/C++
  3. 以及其他非必要的、凭个人喜好下载的插件,如C/C++ Clang Command AdapterVSCode Great Icons等。
  • 听说了各种都能配置好的方案,我挑了其中相当简单的一种自己实现了出来。没有什么Makefile跨平台这类高级操作,完全依赖 VS Code内置工具实现工作环境配置。
  • 依下面顺序进行各个配置文件的更改。如果复制进文件保存时候报错,去掉中文注释内容即可。
  • 在这个配置文件中,目前猜测主要确定了C++调用头文件的位置,其他功能还需细看发现。有些方案中,看到这里除了Win32之外还有Ubuntumac等名称,暂且按下不提。
    {     "configurations": [         {             "name": "Win32",             "intelliSenseMode": "clang-x64",             // 此处设置包含系统环境路径             "includePath": [                 "/usr/include",                 "/usr/local/include",                 "${workspaceFolder}"             ],             "defines": [                 "_DEBUG",                 "UNICODE",                 "__GNUC__=7",                 "__cdecl=__attribute__((__cdecl__))"             ],             "browse": {                 "path": [                     "/usr/include",                     "/usr/local/include",                     "${workspaceFolder}"                 ]             },             "limitSymbolsToIncludedHeaders": true,             "databaseFilename": "",             // 此处设置编译器路径,应将其更改为自己的g++.exe所在路径             "compilerPath": "E:/Environment/MinGW64/bin/g++.exe",             "cStandard": "c11",             "cppStandard": "c++17"         }     ],     "version": 4 }
  • tasks是在F1的命令行中键入Tasks: Run Task后生成的模板中更改的。据不成熟的理解,这个文件限定了当前文件执行任务的过程和属性。
{     "version": "2.0.0",     "tasks": [         {             "label": "Compile",             "command": "g++",             "args": [                 "-g",//指定编译源代码文件                 "${file}",                 "-o",// 指定输出文件名,不加该参数则默认输出a.exe                 "${fileDirname}/${fileBasenameNoExtension}.exe",                 "-ggdb3",   // 生成和调试有关的信息                 "-Wall",    // 开启额外警告                 "-static-libgcc",   // 静态链接                 "-Wno-format",                 "-finput-charset=UTF-8",//输入编译器文本编码 默认为UTF-8                 "-fexec-charset=GBK"//编译器输出文本编码 自行选择              ],              "type": "shell",              "group": {                 "kind": "build",                 "isDefault": true             },              "presentation": {                 "echo": true,                 "reveal": "always",                 "focus": false,                 "panel": "shared"             },             "problemMatcher": {                 "owner": "cpp",                 "fileLocation": [                     "relative","\\"                 ],                 "pattern":{                     "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",                     "file": 1,                     "line": 2,                     "column": 3,                     "severity": 4,                     "message": 5                 }             }         }     ] }
  • launch似乎是在按下F5时“运行”的文件。刚开始每次编译运行都要通过F1打开的命令行中运行task,然后才可以用F5和Ctrl+F5运行编译生成的exe文件。有了”preLaunchTask”之后,就可以直接与tasks中的各项任务相绑定,大大减小了编译时耗费的心力和时间。
{     "version": "0.2.0",     "configurations": [         {             "name": "C++ Launch (GDB)", // 配置名称,将会在启动配置的下拉菜单中显示             "type": "cppdbg", // 配置类型,这里只能为cppdbg             "request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)             "targetArchitecture": "x64", // 生成目标架构,一般为x86或x64             "program": "${fileDirname}/${fileBasenameNoExtension}.exe", // 将要进行调试的程序的路径             "args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可             "stopAtEntry": false, // 设为true时程序将暂停在程序入口处,一般设置为false             "cwd": "${workspaceRoot}", // 调试程序时的工作目录,一般为${workspaceRoot}             "externalConsole": true, // 调试时是否显示控制台窗口,一般设置为true显示控制台             "internalConsoleOptions": "neverOpen", // 如果不设为neverOpen,调试时会跳到“调试控制台”选项卡",             "MIMode": "gdb", // 指定连接的调试器             "miDebuggerPath": "E:/Environment/MinGW64/bin/gdb.exe", // 调试器路径             "setupCommands": [                 {                     "description": "Enable pretty-printing for GDB",                     "text": "-enable-pretty-printing",                     "ignoreFailures": false                 }             ],             // 此处设置按下F5调用的tasks.json中的任务标签label             "preLaunchTask": "Compile"         }     ] }
  • 这个好像随意配置……我也把我改的一些放上来吧。
  • 原理是从默认配置中复制相关设置到用户设置空间并覆盖默认设置,这个设定感觉相当棒!不会清除默认配置,又可以实现用户自定义配置。以这种形式实现我倒是第一次发现。
{     "workbench.colorTheme": "Hopscotch",     "atomKeymap.promptV3Features": true,     "editor.multiCursorModifier": "ctrlCmd",     "editor.fontSize": 16,     "files.associations": {         "*.json": "jsonc",         "*.cfg": "ini",         "*.fsh": "glsl",         "stack": "cpp",         "iostream": "cpp",         "ostream": "cpp",         "*.tcc": "cpp",         "cctype": "cpp",         "clocale": "cpp",         "cmath": "cpp",         "cstdint": "cpp",         "cstdio": "cpp",         "cstdlib": "cpp",         "cwchar": "cpp",         "cwctype": "cpp",         "exception": "cpp",         "initializer_list": "cpp",         "iosfwd": "cpp",         "istream": "cpp",         "limits": "cpp",         "new": "cpp",         "stdexcept": "cpp",         "streambuf": "cpp",         "system_error": "cpp",         "type_traits": "cpp",         "typeinfo": "cpp",         "utility": "cpp"     },     "editor.snippetSuggestions": "top",     "C_Cpp.clang_format_sortIncludes": true,     "editor.wordWrap": "on",     "editor.formatOnPaste": true,     "editor.formatOnType": true, }
  1. 以上四个json文件在.vscode文件夹内,由VSCode软件自动生成,似乎每次新建的时候都需要重新设置。因此我的打算是建立一个文件夹,先用一个测试案例将配置文件设置好,然后就在这个文件夹内写以后的很多小程序,省去了每次都要打开这些文件复制到新文件的配置文件里的麻烦。
  2. 我就是在C++配置文件中设置"intelliSenseMode": "clang-x64",在tasks配置文件中设置"command": "g++",目前并不知道这样做会有什么后果。
  • 更多详细内容,且听下回分晓。工地上事情马上就要多起来了,希望能有集中的时间再玩下去。
  • 本文暂时只实现了VSCode中编译C++程序的最简单配置,能够运行书上的各种练习程序。
  • 今日时间不够,下次再说碰到的各种问题。
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!