同名函数和可变参数函数

smalloc
同名函数和可变参数函数

1。同一个文件中可以同时定义
int fun(char,char){}
int fun(){}
吗?

2。以定义函数int fun(char,int)
可以调用fun(1)吗?

同名函数是否有效,在<c程序设计语言>和<c语言参考手册>里似乎都没提到

cugb_cat
1 C中不可以
2 可以,不过可能会有问题。

flw2
应该都有规定
1叫重定义
2是标准转换

flw2
看错了,不是标准转换,如果有声明就不对了,没有声明在C中是可以的,fun里面如果使用int那个参数,那么就是栈上的一个位置,比如x86中的返回地址

zszyj
[quote]原帖由 [i]smalloc[/i] 于 2008-2-19 17:03 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=7979252&ptid=1054427][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
1。同一个文件中可以同时定义
int fun(char,char){}
int fun(){}
吗?

2。以定义函数int fun(char,int)
可以调用fun(1)吗?

同名函数是否有效,在和里似乎都没提到 [/quote]

1和2在C中都不可以, 前者是因为函数同名,后者是因为参数个数不匹配,编译通不过.

1在C++中可以, 叫做overload; 2在C++中适当修改后可以, 方法是将第二个参数定义为有缺省值, 例如: int fun(char, int=0).