C:为什么将一个 int 添加到一个空变量会产生随机数

标签 c

C 的新手,当我运行这段代码时 - 发生了意想不到的事情:

#include <stdio.h>

int add();

int main(void)
{
    printf("%d\n",add(3));
}

int add(int i, int j)
{
    return i+j;
}

我知道我没有为 add 函数提供第二个参数。出于好奇,谁能告诉我为什么仅提供 1 个参数调用函数会继续返回随机数,例如 2127001435...612806891...-395221029?

最佳答案

如果您违反语言规则并且程序可以编译,则其行为未定义(即,任何事情都可能发生)。

int add();

告诉编译器允许你用任何东西调用add,但你仍然 必须确保如果函数定义接受两个 int,您将使用恰好两个 int 调用它。

带有空参数的声明有时很有用,但在 99% 的情况下您都希望避免使用它们。

如果你用这个替换声明

int add(int, int);

编译器应该避免错误,或者至少警告您错误。

(此外,带有类型化参数的声明将使编译器在可能的情况下转换不合适的参数(例如,如果您要使用 long 调用您的 add 函数,那么对于类型化声明,long 参数将隐式转换为 int。如果声明为 int add();,则不会发生这种情况))

关于C:为什么将一个 int 添加到一个空变量会产生随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41169147/

相关文章:

c - strcat_s 和 char 指针新手问题

c - 使用 Eclipse 在 C 中舒适地工作

c - Linux 上的 GCC makefile 具有多个 *.c 文件

c - 使用指针遍历内存

c - 在sqlite3中,我们可以将sqlexecute(.....callback function...)转换为sqlite_prepare,step,finalize

Cachegrind 的 cg_annotate 不显示我的源代码的注释

c - 使用 C 获取 IP 版本 6

关于scanf的C编程(程序读取多个变量的情况)

c - 我们如何使用 printf 打印字符串

c - 读取txt,使用链表计算每个字母表