在代码中注释printf()语句

时间:2013-10-21 06:30:58

标签: c coding-style comments

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

 ...... //code
 ...... 
 pkt_bytes_decd = avcodec_decode_audio4( aCodecContext, pFrame, 
                                         &frame_fin, &packet );
//printf("%d bytes from packet decoded\n",pkt_bytes_decd); ...... ...... //code
这是一种不好的做法吗?有人可以根据他们的经验讨论利弊吗?

4 个答案:

答案 0 :(得分:4)

使用一些取决于启用或禁用调试标志的宏会更清晰。

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

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

答案 1 :(得分:3)

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

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

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

$ gcc -DDEBUG <files>

#ifdef DEBUG
printf("extra info");
#endif

答案 2 :(得分:1)

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

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

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

为什么注释

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

什么注释

++藻; //增加sp

答案 3 :(得分:0)

编译器不保留评论。所以可以在评论中写printf。 这不是一个糟糕的做法..但过度的做法很糟糕。 关键是: - &#34;余额&#34;

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

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