条件语句

最后更新于:2022-04-01 05:34:38

条件语句体应该总是被大括号包围来避免错误,即使可以不用(比如,只有一行内容)。这些错误包括多加了第二行,并且误以为它是 if 语句体里面的。此外,更危险的可能是,如果把 if 语句体里的一行注释掉了,之后的一行代码会不知不觉成为 if 语句里的代码。 **推荐:** ~~~ if (!error) { return success; } ~~~ **不推荐:** ~~~ if (!error) return success; ~~~ 或者 ~~~ if (!error) return success; ~~~ 在 2014年2月 苹果的 SSL/TLS 实现里面发现了知名的 [goto fail](https://gotofail.com/) 错误。 代码在这里: ~~~ static OSStatus SSLVerifySignedServerKeyExchange(SSLContext *ctx, bool isRsa, SSLBuffer signedParams,uint8_t *signature, UInt16 signatureLen) { OSStatus err; ... if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0) goto fail; if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0) goto fail; goto fail; if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0) goto fail; ... fail: SSLFreeBuffer(&signedHashes); SSLFreeBuffer(&hashCtx); return err; } ~~~ 显而易见,这里有没有括号包围的2行连续的 `goto fail;` 。我们当然不希望写出上面的代码导致出现错误。 此外,在其他条件语句里面也应该按照这种风格统一,这样更便于检查。
';