3

最近,在处理大量代码时,我观察到有时添加一些额外的 printf() 语句并对其进行注释对于必须修改代码的后期调试(使其更容易)非常有用。但是存在关于过度注释代码和缺乏适当注释的争论。我不确定这种做法在哪里?此外,我发现这种注释方式的一个缺点是它使代码看起来更丑陋。这是一个例子:

...... //代码
 ……
 pkt_bytes_decd = avcodec_decode_audio4(aCodecContext, pFrame,
                                         &frame_fin, &packet ); 
//printf("解码数据包中的 %d 个字节\n",pkt_bytes_decd); …… ...... //代码
这是一个不好的做法吗?有人可以从他们的经验中讨论利弊吗?

4

4 回答 4

4

使用一些取决于启用或禁用调试标志的宏要干净得多。

这样,您无需取消注释即可进行调试。只需启用调试标志,它就会立即在所有此类位置启用日志记录。

有时使用另一种方法 - 调用类似函数log(level, message),并且仅当级别高于设置阈值时才会发出消息(通常称为错误、警告、信息等)。它效率不高,但使调试更容易。

于 2013-10-21T06:39:17.757 回答
4

如果要在最终代码中包含调试语句,请使用命令行选项设置全局,然后检查每个 printf 的全局:

if(DEBUG) printf("extra info");

如果您想要调试语句,但不在最终代码中,请使用预处理器:

$ gcc -DDEBUG <files>

#ifdef DEBUG
printf("extra info");
#endif
于 2013-10-21T06:54:03.720 回答
1

您需要区分在客户站点进行故障排除的永久记录信息和在开发时仅记录信息。我发现后者大部分可以通过使用调试器和 normal 替换// "why-comments"。如果由于某种原因使用调试器太麻烦,那么我个人认为最好有一个不受发布或调试模式影响的日志记录机制。

在开发时拥有两个不同版本的程序总是存在风险,即发布版本和调试版本。如果版本差异太大,您以后可能会得到一些令人讨厌的惊喜。事实上,它们就像两个不同的程序。

例如,调试语句通常会使程序运行速度变慢,因此如果您的代码中有一些计时问题(例如竞争条件),它们可能会被隐藏,但当您在发布模式下运行程序时(或者更有可能在您正在向客户/用户展示程序)。

为什么-评论

++sp; // 将堆栈指针移动到最后一个元素之外以标记下溢

什么评论

++sp; // 递增 sp

于 2013-10-21T07:00:32.320 回答
0

编译器不保留注释。所以可以在评论中写 printf 。不是一个坏习惯。但过度使用是不好的。关键是:- “平衡”

优点:- 1)调试快速检查变得很容易。

缺点:- 1)评论本身可能比代码更令人困惑。2)在调试时,程序员可能倾向于高度依赖注释,从而忽略代码流。3) 写代码时评论是多任务。这会减慢编码速度。:-(

于 2013-10-21T06:49:24.947 回答