c - 为什么我可以在 C 中用一个参数定义函数时调用不带参数的函数?

标签 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 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/

相关文章:

c - 使用循环将输入输入到链表中

我们可以将参数传递给 C 中的信号吗?

c - 使用成员函数访问结构体内部的成员?

c - 倾斜补偿罗盘

c - 在 Cocoa/Obj-C 项目中声明外部函数

c - hiredis 因 TLS 而失败

c - 如何为其他语言(word2vec)制作预训练 vector ?

c++ - 同一台机器上的多个fastcgi程序

c - 在长时间运行的过程中阻止 GUI 卡住

c - 为什么分配 `struct` 会出错?