【教程】在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++
返回:
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
ls
发现多了 a.out
文件,就是编译出来的程序
运行可以使用相对路径,不能直接 a.out
(因为shell觉得这是个命令但是它又不认识),需要 ./a.out
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
是一样的,可以直接在这里操作
g++的参数
设置输出文件名
-o
链接文件
main_file.cpp:
#include <cstdio>
#include "myAdd.hpp"
int main() { printf("Addition = %d\n", threeSum(2, 3, 4)); }
myAdd.cpp:
#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; }
这种注释可以使鼠标悬停时,有参数提示
myAdd.hpp:
#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.cpp
和 myAdd.cpp
g++ main_file.cpp myAdd.cpp
链接:在原本的文件后面直接添加要链接的 .cpp
文件就好
注:声明写在 .hpp
文件中,同时在 .cpp
文件开头include这份对应的 .hpp
文件(可能cpp文件里面需要用到自己写的函数或类)。在其他需要使用 .cpp
中函数或类的文件中include .hpp
文件
注:链接的几份文件中只能有一份 .cpp
文件中有 int main(){ }
函数作为程序的执行入口
错误信息提示
g++ hello.cpp -W -Wall
-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 + A
或 shift + option + A
取消注释:再次进行上述操作即可
提示
code snippet
⇥ 和 ⌘I(I
refers to IntelliSense
)
例:
按 tab
补全结构,继续 tab
跳到下一个语句
双击&三击
双击选中一个词,三击选中一行
光标移动
option + 左/右键
以单词为单位移动
command + 左/右键
跳到行首/尾
command + 上/下键
跳到代码开头/结尾
shift > 光标指向不同位置
选中光标之间的代码
例:
shift > 上下左右
选中
以上操作均可配合使用,亦可搭配delete使用
删除
fn + delete
向后删除
复制粘贴剪切
复制一行:先把光标移到指定行,按 command + C
,再 command + V
剪切一行:先把光标移到指定行,command + X
该行消失,再 command + V
多个光标
option > 光标移到多个不同位置
,可以用来同时改变量名字
代码格式化引入settings.json
全局设置与工作区设置
User是全局设置,Workspace是工作区设置
搜索栏输入 @modified
或 点击手电筒:查看修改历史
工作区
一个文件夹就是一个工作区(例:桌面上的 Cpp
文件夹),一个文件夹约等于一个项目( Cpp
这个文件夹就是供我们学习 Cpp
使用的项目)
全局/用户设置 vs 工作区设置
工作区设置:修改之后只对当前的文件夹(项目)起作用;
用户设置:所有文件夹都会启用这个设置
工作区设置会覆盖用户设置
推荐使用工作区设置
使用工作区设置文件
我们更改Workspace某些设置后,会得到 settings.json
文件,它是工作区的设置文件。只要有 .vscode
目录,VSCode就会读 settings.json
文件,进行设置(利于团队协作)
json文件
json (JavaScript Object Notation),是一种轻量级的数据交换格式,可以被使用在多种编程语言中,用于前后端之间的数据传输、存储和交换数据
json格式的数据是由键值对组成的,其中键值对之间使用 ,
分隔,最后一个可有可无,键和值都必须使用双引号引起来
例如:
{
"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文件
打开方式:
或者通过终端查看
cd ~"/Library/Application Support/Code/User"
ls
cat settings.json
注意:路径中含有空格,需要用引号包裹起来;同时还含有家目录 ~
,不能把 ~
放在双引号里面,否则 shell
无法解析
快捷键
常用
command + W
关闭窗格
shift + command + N
新建窗口
修改快捷键
VSCode
搜索想修改或添加的功能即可
macOS
比如想给Keyboard Shortcuts设置快捷键:
设置 > 键盘 > 键盘快捷键 > App快捷键 > +
如何打印⌘⌥⇧⎋⌃
option + command + 空格
调出符号键盘,分别搜索 interest, option, arrow, broken circle, UP ARROWHEAD