一些有用但没用的东西

ioi 打完就想发了,鸽到了现在,写点关于交互题的东西。

我是一个主用 vim 写代码的人,用 gdb 调试的人。

我在写交互题的时候(或任何要多文件编译的时候),或多或少会有些难受。在以前我会采取编写代码时,将交互库贴到我代码前变为单文件编译,最后再删掉前面多文件编译检查。即使这样也会比较难受。

后来我发现了一种比较好的解决方案:

// filename : test.cpp
#include "akioi.h"
#include "grader.cpp"

void solve(int n) {
}

注意,这样还是可能访问到 grader.cpp 内变量,建议还是要多文件编译检查一下

上面说到,我是 gdb 调试的选手,gdb 在处理多文件时候依然会比单文件难受,主要是你在使用 b/break 命令时候,gdb 不知道你说的是哪个文件,它一般采用你上一次使用 list 展示代码的文件,没有就是 main 所在文件(可能不对,但我目前看来是这样)。也就是说,你打开 gdb 就是一个 break,它是 break 在 grader.cpp 的,这一般不是你写交互题时候想要的。而如果你在一开始使用了 list test.cpp:1,0,那么后面 break 都会是在 test.cpp

当然,作为一个优秀的鸽子,我当然是不想每次打开 gdb 就先打个 list test.cpp 的,我发现 gdb 有个参数是 --eval-command,它会在所有命令前运行。因此我们把 gdb 启动命令从 gdb test 改成 gdb test "--eval-command=list test.cpp:1,0" 就可以了(可能有转义问题,有的话大家自己调调),这完全是可以写进 vim 配置的,而且传统题使用这条指令也是完全没有问题。

这都是训练 ioi 时候写交互写疯了整出的的东西,而且 ioi 试机赛时候才搞好

posted @ 2021-11-29 19:29  skip2004  阅读(833)  评论(2编辑  收藏  举报