使用WSL+VSCode快速C++入门
使用WSL+VSCode快速C++入门
0. 准备工作
0) 系统要求 Windows 10 1803以上
1) 安装WSL(Windows Subsystem Linux)
- 按下Win + X, 在弹出的菜单中选择应用和功能
- 在弹出的窗口中的右侧找到相关设置,点击 “程序和功能”
- 点击新的弹窗左侧 “启用或关闭Windows功能”
- 勾选 “适用于Windows的Linux子系统”, 点击确定等待安装功能
- 打开应用商店, 搜索Ubuntu, 找到Ubuntu 16.04 (或者更新) 点击安装, 安装完成后根据提示可以固定到开始菜单(方便后续使用), 然后重启系统
- 重启系统后, 打开Ubuntu应用, 等待安装完成, 中途会提示输入要设置的子系统用户名和密码, 根据个人喜好设置就行
2) 安装VSCode
- 进入官网下载VSCode的安装程序进行安装即可 点击下载
3) 将VSCode默认的终端配置为WSL的bash终端
- 打开VSCode
- 依次点击菜单项 “文件” - “首选项” - “设置”, 打开用户设置文件
- 在右侧的用户设置(settings.json)中添加下面配置
{
"terminal.external.windowsExec": "C:\\WINDOWS\\System32\\bash.exe",
"terminal.integrated.shell.windows": "C:\\WINDOWS\\System32\\bash.exe"
}
4) 在终端中安装构建工具
- 重启VSCode后, 打开终端 (快捷键 Ctrl + Shift + `)
- 运行下面的终端命令安装C++的编译构建工具
$ sudo apt install build-essential vim git cmake make
- 安装完成后关闭终端, 创建或打开一个工作目录, 再次打开终端(此时终端会自动定位到工作目录)
至此我们的准备工作才算完成了
1. 第一个源文件
1) 基本代码
- 我们新建一个源文件 main.cc (后缀名可以是 *.cc *.cxx *.cpp)
- 接着我们输入一些基础代码来编译生成一个可执行文件
int main(int, char **)
{
return 0;
}
- 打开终端工具, 输入下面的命令编译生成一个可执行程序
$ g++ main.cc
- 执行生成的可执行文件a.out
$ ./a.out
- 使用自定义的可执行文件名称重新编译
$ g++ main.cc -o main # 使用-o 选项指定成的可执行文件名, 这里用的是main
- 执行自定义名称的可执行
$ ./main
以上的终端命令一般情况下都是没有任何输出打印的内容的,如果打印了一些报错信息, 请检查main.cc中的代码是否有拼写错误以及中英文符号错误
如果我们希望在代码中加入一些打印文本的代码, 下一步该怎么做呢?
别急, 慢慢来
2) 第一行代码 Hello, C++
两种方案:
- 面向过程
- 面向对象
面向过程:
- 我们需要一个面向过程的方法(函数)来打印我们的文本, 是哪个函数呢?
最常用的当然是 printf()函数了, 赶紧写上:
int main(int, char**)
{
printf("Hello, C++");
return 0;
}
赶紧编译试试? 不好, 报错了,提示找不到printf的声明…尴尬!!!
-
怎么才能使用这个函数呢?
自己声明一个或者…引入现成的呗
怎么引入呢?
在文件的上面加一句文件包含就好啦 #include <文件名> 或者 #include “文件名”
要引入哪个头文件啊?
printf函数是标准C库里的函数呀, 当然得包含标准C库头文件了 #include
赶紧试试
#include <cstdio>
int main(int, char**)
{
printf("Hello, C++");
return 0;
}
编译,执行, 一气呵成, 哇, 有输出了啊
面向对象:
- 如果把标准输出当成一个对象的话,是哪个对象呢?
标准输出有两个, 一个是正常输出, 一个是错误输出, 分别对应
std::cout 和std::cerr
- 怎么使用这个对象呢?
包含头文件
#include <iostream>
引入命名空间std, 然后使用
using namespace std;
当然也可以不在全局引入命名空间std
虽然你可以使用using的方式引入整个命名空间, 但是个人建议最好别这么干?
为什么呢?
你想啊, 要是你写了一个跟标准库里面你还没用过的同样名字的函数, 你该怎么使用?
你要真想偷点懒啊, 你改成
// using namespace std;
using std::cout;
这样你就之引入了std::cout这一个对象了, 其他的就不收受影响了
我建议啊, 你最好直接使用 std::cout, 虽然多写了一些代码, 但是这样写好处更多啊, 比如不用担心自己写的函数和标准库同名, 多个命名空间都在使用时, 可以很清楚的知道使用的时哪个命名空间里的了
那试试:
#include <iostream>
int main(int, char **)
{
std::cout << "Hello, C++" << std::endl;
return 0;
}
- std::endl是什么呀?
和std::cout一样, 标准库中的一个对象, 区别是功能不一样
什么功能呀?
换行 + 刷新缓冲区, 相当于 \n + std::flush
std::flush是啥?
也是一个对象啊, 用来刷新缓冲区
- 编译运行看看
$ g++ main.cc -o main
$ ./main
Hello, C++
哈哈,终于有自己写的输出文本了
3) 我要开始做加减乘除啦
- 做加法
#include <iostream>
int main(int, char**)
{
int sum = 1 + 2;
std::cout <