一个很简单的算法竞赛调试技巧

刚刚看了华东理工大学罗勇军老师的课件学到的。可能大多数选手都会用吧,不过我现在才知道,所以要记下来。

应用场景

经常得写freopen()重定向,或者需要在代码里printf一个值,然后提交代码的时候得把那些重定向还有输出中间值注释掉,要一行一行注释的话就很麻烦。

然后一个改进就是用预处理指令。
看下面的代码

#include 
#include 
using namespace std;
#define mytest
int main(){
    #ifdef  mytest
    // 如果定义了mytest,那么从这里开始到#endif的语句就会被执行,下面也一样
        freopen("A.in", "r", stdin);
    #endif
    string s;
    cin >> s;
    #ifdef  mytest
        cout << "testing" << endl;
    #endif
    cout << s;
}

这就是举个例子,代码实现的功能就是输入一个字符串并将其输出。
因为#define了mytest,所以重定向和cout"testing"都会被执行(我的A.in里的内容就是“qwert”)。

 
一个很简单的算法竞赛调试技巧_第1张图片
image.png

但是如果把 #define mytest这一行注释掉了,那就不会重定向,也不会输出“testing”了
 
一个很简单的算法竞赛调试技巧_第2张图片
image.png

 

作用

这样子本来需要注释若干行的,现在注释一行就够了。对于我这种不喜欢单步调试直接printf的选手来说是方便了许多。(我遇到过几次忘记删注释然后贡献一发WA的情况呜呜呜。

你可能感兴趣的:(一个很简单的算法竞赛调试技巧)