在macOS下编写C++程序
还是由于最近身边许多同学换到了macOS,他们多数曾经是OIer或者大学打算读计算机,跑来问我如何在macOS下编写C++程序,这里介绍一下我的方法。
(如果你已经熟悉在Linux或是WSL下写程序,那这篇真的没啥好看的)
首先,你需要安装编译器。
由于Xcode会自带一个clang LLVM编译器(与gcc不同,如果写了UB可能会和gcc编译的程序运行结果不同),你只需要去App Store安装Xcode并运行一次即可。
然后,你需要安装一个代码编辑器。
推荐2个代码编辑器:
然后,准备一个好用的终端环境
推荐参考这篇文章: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运行