在C#中,赋值表达式将LHS操作数的值作为值返回:
int i;
while ((i = foo()) > 5) { ... }
Run Code Online (Sandbox Code Playgroud)
这通常很方便,也适用于C风格的语言.但是,它也可能导致很难发现错误,例如:
if ((options == (__WCLONE|__WALL)) && (current.hasUid = true)) retval = -EINVAL;
// Also consider the case of a nullable bool
Run Code Online (Sandbox Code Playgroud)
特别是在安全关键代码中,我想在编译使用此语言功能的代码时至少生成警告.
我该怎么办呢?我是否必须为代码检查工具创建自定义规则?
编辑修复:早些时候,错误的例子是错误地使用int赋值而不是bool赋值.
更新:我同意这x = true是多余的,并邀请上述错误.编写良好的代码不应表现出允许出现这种错误所必需的条件.
特别是我想通过检查(以自动方式)所涉及的问题来确保不会发生这些情况.这增加了在问题进入之前捕获问题的机会.
| 归档时间: |
|
| 查看次数: |
62 次 |
| 最近记录: |