非变量函数如何接受不同数量的参数(与定义的参数不同)? #包括 int foo(); int-bar(); 内部主(空) { foo(2,3,4); 返回0; } int foo(int a,int b) { 返回杆(a); } 整型条(整型c,整型d) { int e=c+d; printf(“%d”,e); 返回e; }
输出 五,非变量函数如何接受不同数量的参数(与定义的参数不同)? #包括 int foo(); int-bar(); 内部主(空) { foo(2,3,4); 返回0; } int foo(int a,int b) { 返回杆(a); } 整型条(整型c,整型d) { int e=c+d; printf(“%d”,e); 返回e; },c,function,C,Function,输出 五, 为什么bar()函数可以接收两个参数?一个函数声明,用一个空括号作为参数列表的意思是,函数可以接收的参数的数量和类型没有限制(和检查)。可以使用任意数量和类型的参数调用它 FWIW,如果要指定一个不带参数的函数,需要指定void作为参数列表,如 #include<stdio.h> int foo(); int bar(); int main(void) { foo(2,3,4); return 0; } int foo(int a, int b) { r
为什么
bar()
函数可以接收两个参数?一个函数声明,用一个空括号作为参数列表的意思是,函数可以接收的参数的数量和类型没有限制(和检查)。可以使用任意数量和类型的参数调用它
FWIW,如果要指定一个不带参数的函数,需要指定void
作为参数列表,如
#include<stdio.h>
int foo();
int bar();
int main(void)
{
foo(2,3,4);
return 0;
}
int foo(int a, int b)
{
return bar(a);
}
int bar(int c, int d)
{
int e = c + d;
printf("%d",e);
return e;
}
引用第§6.5.2.2章“函数调用”中的C11
。。。如果参数的数量不等于参数的数量,则
行为未定义
因此,您的程序调用。绝对不能保证或预测应用程序将如何运行。根据C标准(6.5.2.2函数调用)
int foo(void);
那么编译器就有可能报告错误,而不编译和链接您的程序。在
intbar(intc,intd)
中c
和d
的值是多少,如果它被称为bar(a)
。如果我使用intfoo(inta,intb)
@RakholiyaJenish,它是否能够访问函数foo
中的4
:当您错误调用函数时,c
或d
没有指定值。您没有指定函数原型,因此放弃了它们提供的检查。您正在调用未定义的行为;您可以得到编译器认为合适的任何结果。它不必告诉你这是什么,也不必前后一致,它可以重新格式化你的磁盘驱动器,而不是打印一个半真半假的数字,你没有理由抱怨——你调用了未定义的行为。谢谢@JonathanLeffler和SouravGhosh,我现在明白了。请正确缩进你的代码。避免使用标签。在编辑框中输入应该显示的代码,然后选择它并使用编辑框上方的{}
按钮缩进它,使其显示为代码。还请注意,最好以换行符结束打印语句。你的代码中有很多未定义的行为,但是编译器帮不了你,因为尽管你声明了函数foo()
和bar()
,但你没有指定函数原型。我个人认为没有理由对这个问题投反对票,这是一个真正的问题,许多初学者面临同样的问题,并感到困惑。虽然这可能是一个愚蠢的问题,但问题的质量是好的,但至少,它是以适当的方式提出的。:-)
//..
int foo(int a, int b);
int bar(int c, int d);
int main(void)
{
foo(2,3,4);
return 0;
}
//...