首页 > 解决方案 > 为什么我可以在 C 中使用一个参数定义函数时调用不带参数的函数?

问题描述

我知道我不应该定义任何这样的函数。但我喜欢尝试极限,所以我写了一些这样的代码:

#include <stdio.h>

void func(a)
{
    printf("%d\n", a);
}

int main()
{
    func();
    func();
    func();
    return 0;
}

我真的没有在寻找任何输出,但我看到的那个很奇怪。

输出是

1
0
0

为什么?那些 1 或 0 是从哪里来的?

(顺便说一句,我正在使用 CygWin 和 Eclipse 二人组。)

标签: c

解决方案


您的程序无效。

gcc 8.2 抱怨:

$ gcc -Wall -Wextra -pedantic -std=c17 t.c
test.c: In function ‘func’:
test.c:3:6: warning: type of ‘a’ defaults to ‘int’ [-Wimplicit-int]
 void func(a)

自 C99 以来,所有函数都要求其参数具有有效类型(曾经有“隐式 int”int规则 -如果未指定,则假定函数参数/返回类型)。但是您的程序在 C89 中也无效,因为您实际上没有传递任何参数。所以你看到的是未定义行为的结果。


推荐阅读