LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1205|回复: 6

函数声明跟函数调用的参数不一致,编译不报错,怎么回事??

[复制链接]
发表于 2006-10-27 14:50:17 | 显示全部楼层 |阅读模式
函数声明为:void RTMODE_NewSetAspectRatioConversion(int Convy)


调用的时候是这样的:
void SetVideoConversion(char* Conversion, char* help)
{
        /*printf("\nConversion = %s\n",Conversion);*/
        RTMODE_NewSetAspectRatioConversion (Conversion,help);
}


为什么????
请高手不吝赐教!!!
谢谢!!!
发表于 2006-10-27 15:55:29 | 显示全部楼层
是不是你贴的声明不是编译器找到的那份?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-10-27 16:21:17 | 显示全部楼层
Post by x11
是不是你贴的声明不是编译器找到的那份?

是同一个声明啊!我在所有的源文件里面都搜索过了!
而且引用的好奇怪!怎么可以这样的?
这个函数没有被声明为带可变参数的啊??
回复 支持 反对

使用道具 举报

发表于 2006-10-27 16:26:46 | 显示全部楼层
Post by hhshr825
函数声明为:void RTMODE_NewSetAspectRatioConversion(int Convy)


调用的时候是这样的:
void SetVideoConversion(char* Conversion, char* help)
{
        /*printf("\nConversion = %s\n",Conversion);*/
        RTMODE_NewSetAspectRatioConversion (Conversion,help);
}


为什么????
请高手不吝赐教!!!
谢谢!!!

可能是老的编译器
在以前的C语言中其实是不怎么检查函数参数的匹配情况的
在传递参数的时候只是从右到左依次进栈

函数在取参数的时候,再从栈里依次弹出

因此, 即使右边的参数多出来也不会有太大影响
(出栈的顺序是从左向右)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-10-27 17:28:56 | 显示全部楼层
Post by chai2010
可能是老的编译器
在以前的C语言中其实是不怎么检查函数参数的匹配情况的
在传递参数的时候只是从右到左依次进栈

函数在取参数的时候,再从栈里依次弹出

因此, 即使右边的参数多出来也不会有太大影响
(出栈的顺序是从左向右)



被调用的函数回使用哪个参数作为它的实际参数呢?
第一个还是第二个??也就是刚刚那个函数里面的Conversion,还是help??
怎么使用呢?
在别的函数里面这样调用的:int conversion = 1;
SetVideoConversion(conversion);
能否再说详细点!!
谢谢!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-10-27 17:32:59 | 显示全部楼层
刚开始声明的时候是有一个参数,在别的函数第一次调用是就带两个参数,再别调用又变成一个参数?
怎么能这样变来变去的??
回复 支持 反对

使用道具 举报

发表于 2006-10-27 17:42:18 | 显示全部楼层
Post by hhshr825
被调用的函数回使用哪个参数作为它的实际参数呢?
第一个还是第二个??也就是刚刚那个函数里面的Conversion,还是help??
怎么使用呢?
在别的函数里面这样调用的:int conversion = 1;
SetVideoConversion(conversion);
能否再说详细点!!
谢谢!!


从右向左进栈:
1. ->help
2. ->conversion
    ->栈顶

出栈时从左向右赋值

1. ->Convy

其中help 还在栈中,没有被使用
但是在以后的操作中可能带来灾难性的后果
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表