C语言总共就那么十来种基本类型,如果不typedef来把不同用途的相同类型变量做区分,那么就需要在变量名/函数名上做区分,命名规则就会变得很复杂,源码就会特别长。而且在多人项目中有哪怕一人稍微违背了命名规则,都会带来很大的麻烦。
C语言是Unix的那几位创始人所创造的,他们的哲学就是尽量要简化,一个工具尽量只对应一种功能。C语言标准库函数、标准库用到的类型名称无不带着这种哲学的痕迹,甚至都不用大写字符。
至于Windows里面WORD、DWORD、QWORD、HANDLE之类为啥一定要typedef甚至用宏替换,老程序里面还有FAR、NEAR、PASCAL等特殊的关键词宏,是因为Windows当年是一个跨很多平台的操作系统,16位x86、32位x86、MIPS、PowerPC、Alpha,当然也包括后来的ARM。这些平台不仅void*的长度不同,short、long的长度也可能不同,甚至还会涉及到字节序和对齐的问题,如果是16位Windows,还涉及到源于16位x86段式内存访问方式的远指针近指针问题,回调函数调用方式也和后来的不同。
如果把一些基本类型全部用typedef或者宏定义抽象一层,在开发用户程序时就可以让用户一方在程序中减少一些与平台相关的处理,实现一套源程序能跨平台编译出尽量相同的功能。同时,还可以让一套源代码兼容多个不同的编译器工具链,编译器之间的不同之处让每个工具链的Windows API头文件作者去解决。Windows API设计者搞这样一层变量抽象,是有他们的考虑的。
typedef有的时候的作用就是告诉你,两个样式大小一样的毛巾,哪个是擦脸的,哪个是擦脚的
virtual bool addObjects(PrunerHandle* results, const PxBounds3* bounds, const PrunerPayload* userData, PxU32 count, bool hasPruningStructure); virtual void removeObjects(const PrunerHandle* handles, PxU32 count);
这里PrunerHandle实际上就是uint32,但是怎么对应上下文一看便知
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有