前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基础知识 | 每日一面(66)

基础知识 | 每日一面(66)

作者头像
小林C语言
发布2020-04-02 17:26:16
3000
发布2020-04-02 17:26:16
举报

古代的剑客们与

对手相逢时,无

论对手多么强大,

明知不敌,也要亮出自己的剑!

读者:很多 ANSI 编译器在遇到以下代码时都会警告类型不匹配。ex-

tern int func(float); int func(x) float x; { ...

小林:你混用了新型的原型声明 “extern int func(float);” 和老式的定义 “int func(x) float x;”。通常这两种风格可以混同, 但是这种情况下不行。

旧的C编译器会 “放宽” 传入函数的某些参数。浮点数被升为双精度浮点数, 字符和段整型被升为整型。对于旧式的函数定义, 参数值会在被调函数的内部自动转换为对应的较窄的类型, 如果在函数中那样声明了。

这个问题可以通过在定义中使用新型的语法一致性:

int func(float x) { ... }

或者把新型原型声明改成跟旧式定义一致。

extern int func(double)

这种情况下, 如果可能, 最好把就是定义也改成使用双精度数。毫无疑问, 在函数参数和返回值中避免使用 “窄的” (char, short int 和 float)类型要安全得多。

有时候,正是那些意想不到之人,成就了无人能成之事。

——图灵

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 C语言入门到精通 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档