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

声明数组参数的大小时禁用 static 关键字

6.5.8 ID_forbidStaticArrSize
目录 › next › previous

C 语言规定数组作为形式参数时,可用 static 关键字限定大小,要求对应的实际参数必须是数组第一个元素的地址,且数组的大小不能小于 static 关键字限定的值,否则会导致标准未定义的行为,这种特性有助于编译器优化代码,但也增加了误用风险。

并非所有处理器都可以利用这种特性提高效率,而且应在效率和风险之间合理取舍,不建议在有高可靠性要求的代码中使用这种特性。

示例:

int foo(int a[static 5], int n) {   // Non-compliant
    int i;
    int s = 0;
    for (i = 0; i < n; i++) {
        s += a[i];
    }
    return s;
}

int main() {
    int a[3] = {1, 2, 3};
    return foo(a, 3);       // Undefined behavior
}

例中 foo 函数要求传入的数组至少有 5 个元素,但实际传入的数组只有 3 个元素,导致未定义的行为。

依据

ISO/IEC 9899:1999 6.7.5.3(7) ISO/IEC 9899:2011 6.7.6.3(7)

参考

MISRA C 2012 17.6
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.