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

弃用老式声明与定义

6.11.3 ID_oldStyleParamList
目录 › next › previous

在 C 语言的早期阶段,函数类型、参数类型以及参数列表的声明均可以被省略,这种特性使编译器难以检查相关错误,也会使代码难以阅读和维护。

示例:

int foo();     // Non-compliant
int bar(x);    // Non-compliant

int i = 0;
foo();
foo(i);   // Which is right?
bar(i);
bar(&i);   // Unable to check error

例中 foo 函数并不是没有参数,而是未声明参数,bar 函数只声明了参数名称,如果传入的参数与实际定义不符会导致未定义的行为。

应采用“原型声明”,明确声明函数的参数列表和返回类型:

int foo(void);     // Compliant
int bar(int* x);   // Compliant

相应的老式定义也不应再继续使用,如:

int bar(x) int* x; {  // Non-compliant
    ....
}

相关

ID_missingVoid ID_missingType

依据

ISO/IEC 9899:1999 6.11.6(1)-deprecated ISO/IEC 9899:1999 6.11.7(1)-deprecated ISO/IEC 9899:2011 6.11.6(1)-deprecated ISO/IEC 9899:2011 6.11.7(1)-deprecated

参考

MISRA C 2004 16.6 MISRA C 2012 8.2 SEI CERT EXP37-C
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.