在if语句中分配和测试变量的最合适方法是什么?

heu*_*cus 5 c

以下是哪种做事的首选方式,为什么?假设函数bar()在任何时候都没有取零值,是否存在任何不同的具体情况?

案例1:测试两种情况的真值

if ((foo = bar()) && foo < 0)
    error();
Run Code Online (Sandbox Code Playgroud)

案例2:仅测试分配的变量

if ((foo = bar()) < 0)
    error();
Run Code Online (Sandbox Code Playgroud)

MBy*_*ByD 14

首选方法是将它们分开:

foo = bar();
if (foo < 0)
    error(); 
Run Code Online (Sandbox Code Playgroud)

编辑:这是可读性和避免错误的更好方法,例如在第一种情况下:

if (foo = bar() && foo < 0)
    error();
Run Code Online (Sandbox Code Playgroud)

这应该是:

if ((foo = bar()) && foo < 0)
    error();
Run Code Online (Sandbox Code Playgroud)

  • 虽然我不能告诉你任何编译器是否存在差异,但C编码器不应该关心它.这是可读性和避免错误的更好方法.(如OP第一种情况) (5认同)