我知道我不应该这样定义任何函数。但是我喜欢尝试极限,所以我写了一些这样的代码:
#include <stdio.h>
void func(a)
{
printf("%d\n", a);
}
int main()
{
func();
func();
func();
return 0;
}
我真的不是在寻找任何输出,但我看到的输出非常奇怪。
输出是
1
0
0
为什么?那些 1 或 0 是从哪里来的?
(顺便说一句,我正在使用 CygWin 和 Eclipse duo。)
最佳答案
您的程序无效。
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 以来,所有函数都要求其参数具有有效类型(曾经有 "implicit int" 规则 - 如果未指定,函数参数/返回类型假定为 int
)。但是你的程序在 C89 中也无效,因为你实际上没有传递任何参数。所以你看到的是undefined behaviour的结果.
关于c - 为什么我可以在 C 中用一个参数定义函数时调用不带参数的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53133901/