c语言中函数声明可以添加 默认参数值吗?

例如
int sum(int a=8, int b=6);
可以进行这样的声明吗, 刚刚试了 ,编译过不了 ,是否这只是C++的特性

#include
void foo(int x, int y, int z)
{
printf("x = %d at [%X]n", x, &x);
printf("y = %d at [%X]n", y, &y);
printf("z = %d at [%X]n", z, &z);
}
int main(int argc, char *argv[])
{
foo(100, 200, 300);
return 0;
}
运行结果:
x = 100 at [BFE28760]
y = 200 at [BFE28764]
z = 300 at [BFE28768]
C程序栈底为高地址,栈顶为低地址,因此上面的实例可以说明函数参数入栈顺序的确是从右至左的。可到底为什么呢?查了一直些文献得知,参数入栈顺序是和具体编译器实现相关的。比如,Pascal语言中参数就是从左到右入栈的,有些语言中还可以通过修饰符进行指定,如Visual C++.即然两种方式都可以,为什么C语言要选择从右至左呢?
进一步发现,Pascal语言不支持可变长参数,而C语言支持这种特色,正是这个原因使得C语言函数参数入栈顺序为从右至左。具体原因为:C方式参数入栈顺序(从右至左)的好处就是可以动态变化参数个数。通过栈堆分析可知,自左向右的入栈方式,最前面的参数被压在栈底。除非知道参数个数,否则是无法通过栈指针的相对位移求得最左边的参数。这样就变成了左边参数的个数不确定,正好和动态参数个数的方向相反。
因此,C语言函数参数采用自右向左的入栈顺序,主要原因是为了支持可变长参数形式。换句话说,如果不支持这个特色,C语言完全和Pascal一样,采用自左向右的参数入栈方式
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-04-20
不可以,只有c++可以本回答被提问者采纳

C语言函数的默认参数
C语言中没有参数默认值的概念,但其实可以利用宏来模拟参数的默认值;我们之前介绍过可变参数宏与逗号运算符,将两者相结合的话可以定义出以下形式的宏:当在 func() 里不填写任何内容的时候,正常情况下宏展开后会是 func((default,)) ,但由于 ##__VA_ARGS__ 会将前面多余的逗号忽略,所以宏展...

c语言函数声明中将函数指针参数设置为NULL的默认值
指定形参默认值是C++的语法,标准C是不支持这种语法的。使用c++语法,通常可以保存文件时使用CPP后缀保存。另外,形参的默认值是在声明函数原型的时候指定,不是在函数定义的时候指定。

C语言和C++的区别
在c++中,定义或声明函数时,可在形参中给它赋一个初始值作为默认参数值,如:int FUN(int a = 10);,表示未传参调用时,自动给a赋值10。然而,在c89标准下,这种操作不可行,会引发错误。在c语言中,系统在调用函数时开辟函数栈帧,传入实参时通过mov指令将值传入寄存器,再通过push指令压入栈中...

C语言函数形参初始值?
可以这样调用。int b=0指的是默认参数,调用时传入或不传入b都行,如果不传入b的话,那么b的值就是0。另外注意只有最后面的参数可以是默认参数。

C++语言的基本语法规则
默认参数: C++中可以在函数声明时为参数提供一个默认值,当函数调用时没有提供这个参数的值,编译器会自动用默认值代替。但是在函数定义时就不在指定默认参数值。默认参数有如下规则:只有参数列表后面的部分参数才可以提供默认参数值,一但在一个函数调用中开始使用默认参数,那么这个参数后的所有参数都...

c语言中可不可以直接在函数首部直接给参数赋值
这样在c语言中是不可以的,这是c++的概念,默认参数,使用方法如下:以上面的hello函数为例 hello(n); 默认i=4,m=9。 hello(n,5,23); 这里在函数中i = 5,m = 23.就是说,如果调用时给参数赋值了,就使用赋值的,如果没有,就使用默认的 需要标明一点,这种函数参数表有个规则,就...

C++中函数的显式具体化不能使用默认参数吗
在现代C语言中,默认存储类别(类型)已经逐渐被取消了。早期的C语言中,如果一个函数(包括main()),如果没有显式给出返回类型,则默认为int类型,对现在流行的编译器来说,如果没有给出返回类型,则会出现编译警告信息。

为什么有些函数声明时没有参数?
你指的是C语言中的函数声明时没有参数名吗?函数声明可以只有参数类型而没有参数名,参数名和定义时的参数名不同也是允许的。因为C编译器在编译时忽略参数名,只检查函数的参数的类型和顺序是否与调用的函数匹配。

在C语言中函数的默认参数类型
默认的参数类型 不是无参 void ,而是接受 任意数量和类型的参数 。也就是说 int func() 和 int func(void) 是不一样的。下面通过一个例子加深了解一下在C语言中函数的默认参数类型:  所以说,在使用c语言编写无参函数时,一定要把 void 写上去,不然会有安全隐患。

c语言在函数定义的时候可以调用已定义的自定义函数吗
可以的,前提是,在使用一个函数之前必须先对他进行声明:\/\/void B();声明B函数的存在。void A(){ B();\/\/非法,程序执行到此时并不知道B函数的存在。} void B(){ }

相似回答