Skip to content

教程|开启VSCode的大门

【教程】在macOS上用VSCode写C++代码 5 开启VS Code的大门(上)

【教程】在macOS上用VSCode写C++代码 5 开启VS Code的大门(下)

用终端写代码

写代码

在终端上使用命令创建 .cpp 文件(是文本文件),用 vim 打开编辑写代码,保存退出

接下来是把代码文件编译成二进制可执行文件

g++编译

如何编译代码?用程序

g++ 程序可以将 cpp 代码编译为二进制可执行文件

下载必要的命令行工具 Command Line Tools

苹果的开发集成工具是 Xcode.app,其中就带着一堆命令行工具

下载完成后,可以查看 g++ 程序的版本和shell的执行方式

g++ --version
which g++

返回:

1
2
3
4
Apple clang version 15.0.0 (clang-1500.1.0.2.5)
Target: arm64-apple-darwin23.5.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

/usr/bin/g++ ,说明 g++ 已经在环境变量中,以后调用就可以不用输入绝对路径

第一次编译和执行

g++ hello.cpp

ps. gcc hello.c

ls 发现多了 a.out 文件,就是编译出来的程序

截屏2024-07-07 23.08.18

运行可以使用相对路径,不能直接 a.out(因为shell觉得这是个命令但是它又不认识),需要 ./a.out

截屏2024-07-08 08.37.12

Ps. chase后的 % 是结束符

给a.out改个名字

g++ 添加 -o 参数

g++ hello.cpp -o hello.out      #推荐加上后缀
g++ hello.cpp -o hello      #不带后缀亦可

有关后缀

文件的后缀名是文件名的一部分,可有可无,但这个后缀名会告诉系统它用什么应用程序去打开这个文件。双击exec的 hello 发现系统打开了终端,但是双击 hello.out 发现系统并不知道怎么打开这个文件(其实这个 .out 相当于 Windows 里面的可执行文件 .exe

Mac无法运行 .exe 文件

认识VSCode

VSCode是集合了文本编辑、终端、访达功能的"文本编辑器"。

使用:Cpp、python 爬虫、Applescript 脚本、shell 脚本、开发网站前后端、markdown

Ps. 开发Windows软件要用 Visual Studio

VSCode界面认识

右键 > format document 代码格式规范

command + J 打开终端,和 Terminal 是一样的,可以直接在这里操作

截屏2024-07-08 09.06.09

g++的参数

设置输出文件名

-o

链接文件

main_file.cpp:

1
2
3
#include <cstdio>
#include "myAdd.hpp"
int main() { printf("Addition = %d\n", threeSum(2, 3, 4)); }

myAdd.cpp:

1
2
3
4
5
6
7
8
#include "myAdd.hpp"
/// Just add three integers.
/// @param a int1
/// @param b int2
/// @param c int3
/// @return additon of a, b and c
int threeSum(int a, int b, int c) { return a + b + c; }
int fourSum(int a, int b, int c, int d) { return a + b + c + d; }

这种注释可以使鼠标悬停时,有参数提示

截屏2024-07-08 09.26.01

myAdd.hpp:

1
2
3
4
5
#ifndef myAdd_hpp
#define myAdd_hpp
int threeSum(int a, int b, int c);
int fourSum(int a, int b, int c, int d);
#endif /* myAdd_hpp */

此例中,需要同时编译 main_file.cppmyAdd.cpp

g++ main_file.cpp myAdd.cpp

链接:在原本的文件后面直接添加要链接的 .cpp 文件就好

注:声明写在 .hpp 文件中,同时在 .cpp 文件开头include这份对应的 .hpp 文件(可能cpp文件里面需要用到自己写的函数或类)。在其他需要使用 .cpp 中函数或类的文件中include .hpp 文件

注:链接的几份文件中只能有一份 .cpp 文件中有 int main(){ } 函数作为程序的执行入口

错误信息提示

g++ hello.cpp -W -Wall

截屏2024-07-08 09.52.34

-w 关闭编译时的警告

-Wall 编译后显示所有警告

-W 只显示编译器认为会出现错误的警告

编译时不使用 -W -Wall 选项的是stupid的

添加C++标准

-std=c++11 就会按照 c++11 标准编译,一般用最新标准

编译优化

目的:让生成的代码文件小一些,运行起来快一些

CSDN|gcc -O0 -O1 -O2 -O3 四级优化选项及每级分别做什么优化

注:

  • 如果链接的文件不多或者代码没有那么长,优化效果不明显

  • 自己运行程序,开不开优化都无所谓;但是如果要把可执行文件发给别人用,开 O2 优化比较好

调试选项

编译型语言 vs 解释型语言:解释型语言一行一行执行 (eg. python),但编译型语言不是 (编译型语言的优势是:执行大概比解释型语言快100倍)

由于 C++ 是编译型语言,如果直接编译成可执行文件,调试器无法一行一行过写的代码。想调试必须添加 -g 选项,让编译得到的可执行文件尽量不要被优化,臃肿一些但附加一些调试信息 (创建符号表),让得到的可执行文件尽量接近写的代码

g++ hello.cpp -g

debug版本 vs release版本

  • 查错就用 debug版本 的可执行文件
  • 把程序发出去给别人用就用 release版本(体积更小、执行更高效)
  • 区别是编译时有没有 -g 这个参数

最终结果

release:

g++ <filename>.cpp <other_cpp_files> -o <filename>.out -W -Wall -O2 -std=c++17

debug:

g++ <filename>.cpp <other_cpp_files> -o <filename>.out -W -Wall -g -std=c++17

VSCode简单的文本编辑技巧

注释

单行注释:光标移到该行再 Ctrl + /command + /

多行注释:选中代码再 Shift + Alt + Ashift + option + A

取消注释:再次进行上述操作即可

提示

code snippet ⇥ 和 ⌘I(I refers to IntelliSense

例:

截屏2024-07-08 10.27.11

tab 补全结构,继续 tab 跳到下一个语句

双击&三击

双击选中一个词,三击选中一行

光标移动

option + 左/右键 以单词为单位移动

command + 左/右键 跳到行首/尾

command + 上/下键 跳到代码开头/结尾

shift > 光标指向不同位置 选中光标之间的代码

例:

截屏2024-07-08 10.43.20 截屏2024-07-08 10.43.29

shift > 上下左右 选中

以上操作均可配合使用,亦可搭配delete使用

删除

fn + delete 向后删除

复制粘贴剪切

复制一行:先把光标移到指定行,按 command + C ,再 command + V

剪切一行:先把光标移到指定行,command + X 该行消失,再 command + V

多个光标

option > 光标移到多个不同位置 ,可以用来同时改变量名字

截屏2024-07-08 10.55.15

代码格式化引入settings.json

全局设置与工作区设置

截屏2024-07-08 11.03.12

User是全局设置,Workspace是工作区设置

搜索栏输入 @modified 或 点击手电筒:查看修改历史

工作区

一个文件夹就是一个工作区(例:桌面上的 Cpp 文件夹),一个文件夹约等于一个项目( Cpp 这个文件夹就是供我们学习 Cpp 使用的项目)

全局/用户设置 vs 工作区设置

工作区设置:修改之后只对当前的文件夹(项目)起作用;

用户设置:所有文件夹都会启用这个设置

工作区设置会覆盖用户设置

推荐使用工作区设置

使用工作区设置文件

我们更改Workspace某些设置后,会得到 settings.json 文件,它是工作区的设置文件。只要有 .vscode 目录,VSCode就会读 settings.json 文件,进行设置(利于团队协作)

截屏2024-07-08 11.12.57

json文件

json (JavaScript Object Notation),是一种轻量级的数据交换格式,可以被使用在多种编程语言中,用于前后端之间的数据传输、存储和交换数据

json格式的数据是由键值对组成的,其中键值对之间使用 , 分隔,最后一个可有可无,键和值都必须使用双引号引起来

例如:

1
2
3
4
5
{
  "name": "Apifox",
  "age": 2,
  "city": "Guangzhou"
}

完整的 JSON 数据示例:

{
  "name": "Simon",
  "age": 2,
  "isMale": true,
  "hobbies": ["reading", "learning", "traveling"],
  "address": {
    "city": "Guangzhou",
    "postCode": "510000"
  },
  "email": null
}

全局设置的json文件

打开方式:

截屏2024-07-08 11.28.11

或者通过终端查看

1
2
3
cd ~"/Library/Application Support/Code/User"
ls
cat settings.json

注意:路径中含有空格,需要用引号包裹起来;同时还含有家目录 ~ ,不能把 ~ 放在双引号里面,否则 shell 无法解析

快捷键

常用

command + W 关闭窗格

shift + command + N 新建窗口

修改快捷键

VSCode

截屏2024-07-08 11.42.40

搜索想修改或添加的功能即可

macOS

比如想给Keyboard Shortcuts设置快捷键:

设置 > 键盘 > 键盘快捷键 > App快捷键 > +

如何打印⌘⌥⇧⎋⌃

option + command + 空格 调出符号键盘,分别搜索 interest, option, arrow, broken circle, UP ARROWHEAD