【发布时间】:2021-12-31 17:16:20
【问题描述】:
我正在使用这些代码行来调试我的 C++ 程序。
void dbg_out(){cerr << endl;}
template<typename Head, typename... Tail> void dbg_out(Head H, Tail... T) { cerr << ' ' << H; dbg_out(T...); }
#define dbg(...) cerr << "(" << #__VA_ARGS__ << "):", dbg_out(__VA_ARGS__)
但是这样做的问题是,当我使用 dbg 函数并提交给 codeforces 或 codechef 等在线法官时,它会增加代码的执行。有没有办法让在线编译器忽略调试语句?
【问题讨论】:
-
#if 0是禁用代码的相当标准的方法 -
只需将
#define dbg(...) cerr << "(" << #__VA_ARGS__ << "):", dbg_out(__VA_ARGS__)替换为#define dbg(...)? -
将代码括在
#ifdef WHATEVER中,当你想登录时,用-DWHATEVER编译? -
为什么不删除所有调试日志并在本地运行您的代码并附加调试器。然后只需将代码发布到竞争网站。另一种选择是在本地编写一些单元测试并使用它们来验证部分代码是否正确。这些(调试/单元测试)无论如何都是作为软件开发者开发的好技能。而且它们往往有助于提供更简洁的代码。
-
请注意,您可以将
dbg_out简化为:template<typename... Ts> void dbg_out(Ts... args) { ((std::cerr << ' ' << args), ...); std::cerr << std::endl;}