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

避免隐式声明

6.11.1 ID_implicitDeclaration
目录 › next › previous

在 C90 标准中,如果函数在没有事先声明或定义的情况下被调用,编译器会为其生成一个隐式声明,指定函数的返回类型为 int,但不指定参数类型和数量,如果与函数的实际定义不符会导致未定义的行为。

实践表明,隐式声明会隐藏错误,不是可靠的语言特性,已从后续标准中移除。

示例:

// In main.c
#include <stdio.h>

int main(void) {
    double r = foo();   // Non-compliant
    printf("%f\n", r);
}

调用 foo 函数前未对其进行声明,但仍可通过编译,如果 foo 函数的实际定义如下:

// In foo.c
double foo() {
    return 1.23;
}

返回值将被解释成整型,使程序输出错误的结果。

依据

ISO/IEC 9899:1990 6.3.2.2-undefined

参考

MISRA C 2004 8.1 MISRA C 2012 17.3 SEI CERT DCL31-C
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.