我正在学习C。我在学习一些章节的时候做了一些小实验。
主要问题是我不明白为什么代码的执行结果如下,因为它不符合我认为代码会去的地方。
源代码:
#include <stdio.h>
int imax();
int main(void)
{
printf("%zd %zd\n", sizeof(int), sizeof(double));
printf("The maximum of %d and %d is %d.\n", 3, 5, imax(3));
printf("The maximum of %d and %d is %d.\n", 3, 5, imax(3.0, 1000.0));
printf("The maximum of %d and %d is %d.\n", 3, 5, imax(3.0));
printf("The maximum of %d and %d is %d.\n", 3, 5, imax(1000.0));
return 0;
}
int imax(n, m)
int n, m;
{
return (n > m ? n: m);
}
输出:
我不明白的是为什么最后三个打印语句打印相同的词! 我知道我正在做一个测试来研究当使用不关心形式参数类型的旧样式声明函数时会发生什么。 在此背景下,我设计了四种调用函数实参与被调用函数形参要求不匹配的情况。
我知道这与 C 中的堆栈机制有关。我尽力寻找原因。在我看来,最后三个打印语句的行为应该有所不同。事实上,我认为语句 imax(3.0, 1000.0) 可能与 imax(3.0) 或 imax(1000.0) 相同,但不可能与两者相同!
最佳答案
int imax();
和
int imax(n, m)
int n, m;
{
return (n > m ? n: m);
}
是一种古老的 C 代码风格。不要使用它,因为它的问题之一是它不进行任何函数参数检查。
正确的标准化代码应该是
int imax( int n, int m)
和
int imax( int n, int m)
{
return (n > m ? n: m);
}
关于C、当调用函数的参数不满足被调用函数的参数需要时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49792706/