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/