在macOS下编写C++程序

Table of Contents

还是由于最近身边许多同学换到了macOS,他们多数曾经是OIer或者大学打算读计算机,跑来问我如何在macOS下编写C++程序,这里介绍一下我的方法。

(如果你已经熟悉在Linux或是WSL下写程序,那这篇真的没啥好看的)

首先,你需要安装编译器。

由于Xcode会自带一个clang LLVM编译器(与gcc不同,如果写了UB可能会和gcc编译的程序运行结果不同),你只需要去App Store安装Xcode并运行一次即可。

然后,你需要安装一个代码编辑器。

推荐2个代码编辑器:

Sublime Text

Visual Studio Code

然后,准备一个好用的终端环境

推荐参考这篇文章:https://blog.cyyself.name/2018/07/macos/

你可以选择先处理一下bits/stdc++.h问题

参考这里:https://github.com/tekfyl/bits-stdc-.h-for-mac
执行以下shell代码:

git clone https://github.com/tekfyl/bits-stdc-.h-for-mac
mkdir /usr/local/include/bits
cp bits-stdc-.h-for-mac/stdc++.h /usr/local/include/bits
rm -rf bits-stdc-.h-for-mac

注意,这里的stdc++.h自带了”using namespace std;”,如果你不希望经常在各个OJ上遇到CE的问题,你可以自己用文本编辑器打开/usr/local/include/bits/stdc++.h,删除”using namespace std;”

然后,我们可以开始尝试写A+B Problem了

首先,打开代码编辑器(这里以Sublime为例),新建一个文件,并在界面右下角把语言设置为C++。

这时候,我们打一些代码,就可以看到代码高亮出现了。

然后,将它保存,例如我这里选择保存到桌面上的A+B Problem.cpp。

之后,打开终端,默认目录取决于passwd的设置,该设置默认为用户主目录,即/Users/$USER/,我们可以通过~来指代这个目录。

cd ~/Desktop/
# 上一行也可以改为cd Desktop
ls
g++ "A+B Problem.cpp"

编译完后,如果没有指定文件名会生成一个a.out文件在原目录,这时候,我们可以在终端中这样执行它。

/Users/cyy/Desktop/a.out
# cyy要换成你的用户名
~/Desktop/a.out
./a.out

一定有很多人问,为什么直接a.out不能呢?

原因是Unix系统为了安全的缘故,执行当前文件夹下的可执行文件必须使用相对路径,”.”指代当前文件夹,因此”./a.out”就是当前文件夹下的”a.out”文件。

如果你需要在编译的时候输出更多信息,你可以加上-Wall -Wshadow -Wextra等。

如果需要让程序一旦数组越界马上报错(而不是写到别的地方才RE),你可以加上-fsanitize=address参数。

如果需要开启O2优化,你可以加上-O2参数。(O大写,注意,数组越界的地方可能被O2优化掉,不适合与-fsanitize=address一起使用)

如果你需要调试程序,你可以加上-g参数。

如果需要改变输出可执行文件名,你可以输入-o $你要改的名字。(O小写)

举个例子

如果你需要测样例,你可以这样做:

当diff没有输出的时候说明两个文件完全一致。可以用来测大样例。

其中,>和<是用来重定向输入输出的,和你在程序中写freopen类似。

关于调试

Xcode安装后自带了lldb调试器,至少我会用的用法都和gdb一致。

同样需要在程序编译的时候加上-g参数。

这个我推荐大家自己上网查找资料,部分书籍,如《算法竞赛入门经典》也有教gdb的使用。

大概说一下吧

b加断点,可以用”b 5″表示在第五行加断点

c跳过断点,直到下一个断点

s单步执行

n执行这一行,跳到下一行

bt查看调用栈

up跳到调用栈下一层

p输出(甚至可以输出一个数组和一个struct,还可以输出调用了某个函数计算后的结果)

r运行

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to Top