对于此语句,这是一个更好的表达

Which is a better expression for this if statement?

本文关键字:一个 更好 语句 于此      更新时间:2023-10-16

我已经被告知FFMPEG的补丁程序在流向FLV播放器时解决了问题。

rtmpproto.c 的第2314行周围有以下表达式:

if (rt->flv_header_bytes < 11)
            break;

修复程序是将其更改为包括此附加要求:

if (rt->flv_header_bytes < 11 && !rt->flv_off)
            break;

但是,我对此语句的逻辑感到好奇。第一个语句检查以查看FLV标头是否小于11个字节,但是检查FLV流是否先打开之前,在检查标头有多少个字节之前,是否更有效地检查FLV流?

if (!rt->flv_off && rt->flv_header_bytes < 11)
            break;

另外,将语句更改为呢?

if (rt->flv_off || (!rt->flv_off && rt->flv_header_bytes < 11)
                break;

这会更有效,还是可以以某种方式打破代码?

这取决于哪个条件最常失败,以及编译器是否尊重您输入条件的顺序。假设较晚是正确的(一个很大的假设),首先检查标头大小可能更有效,因为大概是FLV播放器通常都在。

对于完整的评估来说,更多的细节是必不可少的……尽管无论如何这都不重要,因为(a)(a)"浪费"几乎可以肯定并不重要,而且(b)编译器很可能会做得更好。优化比您的优化。

如果您想在第三份语句中使用或使用或使用Demorgan定律并写

if(rt->flv_off || rt->flv_header_bytes >= 11)

但是,这不是真正担心的事情。