刚刚看了华南理工大学罗勇军老师的课件学到的。可能大多数选手都会用吧,不过我现在才知道,所以要记下来。
应用场景
经常得写freopen()重定向,或者需要在代码里printf一个值,然后提交代码的时候得把那些重定向还有输出中间值注释掉,要一行一行注释的话就很麻烦。
然后一个改进就是用预处理指令。
看下面的代码
#include <iostream>
#include <cstring>
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”)。
但是如果把
#define mytest
这一行注释掉了,那就不会重定向,也不会输出“testing”了image.png
作用
这样子本来需要注释若干行的,现在注释一行就够了。对于我这种不喜欢单步调试直接printf的选手来说是方便了许多。(我遇到过几次忘记删注释然后贡献一发WA的情况呜呜呜。
网友评论