【发布时间】:2017-08-16 20:41:25
【问题描述】:
很多书都说我们决不能在算术和函数定义上浪费一点。我看到很多从 0 到 255 的小数被定义为 char 类型变量,甚至更大的正数被定义为 unsigned short int 类型。
我们为什么不用一个无符号的short int 或者一个char 类型来代替int 来表示一个返回值呢?
我试过了:
char main(){return 0;}
没关系。
【问题讨论】:
-
“很多书都说我们决不能浪费一点……” 什么书这么说的?这不是一个真实的说法。
-
你的函数可以返回任何你想要的,但不能返回
main()。那个返回int因为这是 C 标准指定它的方式。 -
该标准特别要求
main返回一个int(稍微过于简单化),所以这就是调用环境所期望的。如果您愿意,您可以为main以外的函数使用char返回类型,但这不会有很大帮助。 -
除此之外,据我所知,在硬件级别,您永远无法有效地从内存中仅获取 1 个字节,因此节省字节确实没有性能优势。编译器甚至会对变量强制进行 4 字节对齐以提高性能,因为在变量之间放置垃圾比仅仅因为变量地址未对齐而不得不从两个单独的地址获取数据要好。
-
@KeithThompson:在 8 位 MCU 上这是常见的做法。