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

C 代码中参数列表如果为空应声明为“(void)”

6.5.6 ID_missingVoid
目录 › next › previous

在 C 语言中,如果将函数的参数列表声明为空括号,表示参数的声明被省略,而不是没有参数,这很容易使人误解,没有参数的参数列表应声明为“(void)”。

示例:

// In a.h
int foo();  // Non-compliant

// In a.c
#include "a.h"

int foo(int a) {
    return a + 1;
}

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

int main() {
    printf("%d\n", foo(1));  // Output: 2
    printf("%d\n", foo());   // Can be compiled, but what is output?
}

例中 foo(1) 和 foo() 两种调用都可以通过编译,然而声明与实现不一致的问题总是令人困惑的,如果明确将参数声明为 void 或 int a 则可以解决这种问题。

应改为:

int foo(void);   // Compliant, ‘foo(1)’ cannot be compiled

或者:

int foo(int a);  // Compliant, ‘foo()’ cannot be compiled

相关

ID_oldStyleParamList ID_superfluousVoid

依据

ISO/IEC 9899:1999 6.7.5.3(14) ISO/IEC 9899:1999 6.11.6(1)-deprecated ISO/IEC 9899:2011 6.7.6.3(14) ISO/IEC 9899:2011 6.11.6(1)-deprecated

参考

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