首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

调用函数时,请罗列不使用函数原型潜在的风险

2012-09-29 
调用函数时,请列举不使用函数原型潜在的风险?调用函数时,请列举不使用函数原型潜在的风险。[解决办法]那家

调用函数时,请列举不使用函数原型潜在的风险?
调用函数时,请列举不使用函数原型潜在的风险。

[解决办法]
那家公司的面试题?
[解决办法]
C语言里面不使用函数原型潜在的风险。

1.编译时参数类型不能被检查,这种情况发生在没有函数声明或者将函数声明为return_type func();时被编译器理解为参数个数不确定
2.不使用函数原型时,参数传递时有类型提升,char->int, float->double ..如果函数定义时是用的ANSI形式,就会隐藏错误
参见《C专家编程》上提到的:
ANSI函数声明(原型)与K&R函数定义,如果使用一个较窄的类型时就会失败,函数传递时是实际的较窄类型,而函数体内期望得到的是提升后的类型
K&R函数声明与ANSI函数定义,如果使用一个较窄的类型时就会失败,函数传递时是提升后类型,而函数体内期望得到实际的较窄的类型

[解决办法]
还有一点函数原型于定义不同的是如果要加函数的默认参数的话必须加在函数声明中,而不能加在函数定义中,加在函数声明中,编译器就会把参数提前压入栈,而如果放在定义中,过不了编译,如果原型和定义中都有默认参数的话就犯了重复定义默认参数的错误(还没想明白为什么啊~~~可能是不让压2次栈吧),只有定义中有默认参数,调用函数不带参数调用时候,由于编译时调用参数是用函数原型来检查的,所依通不过编译
http://sdzhguoliang.blog.163.com/blog/static/9982057201062652022596/
http://cc712cc.iteye.com/blog/692010

热点排行