☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

不应存在多余的类型转换

12.19 ID_redundantCast
目录 › next › previous

多余的类型转换是没有意义的,往往意味着某种错误。

不应出现下列情况:

  • 原类型与转换后的类型完全相同
  • 非 void 转换的结果没有被使用

示例:

float foo(int x) {
    return (int)x;   // Non-compliant
}

float bar(int y) {
    (float)y;        // Non-compliant
}

例中参数 x 转换后的类型与转换前完全相同,参数 y 转换后没有被读取,均不符合要求。

应改为:

float foo(int x) {
    return (float)x;   // Compliant
}

float bar(int y) {
    return (float)y;   // Compliant
}

可用显式 void 转换表示有意放弃表达式的值,但对无返回值的函数调用不应再使用 void 转换,如:

char foo();
void bar();

void baz(int x) {
    (void)x;        // Compliant
    (void)foo();    // Compliant
    (void)bar();    // Non-compliant, ‘(void)’ is redundant
}

参考

CWE-704
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.