Typedeffing结构是一个坏主意,但有* * typedef的良好用途。特别是功能指针。 [...] Typedeffing structs is a bad idea, but there *are* good uses for typedef. Particularly with function pointers. [...] 使用或避免使用struct和union类型的typedef 似乎是一个品味问题。我没有看到任何坚实的技术理由支持一种做法而不是另一种做法,所以 归结为de gustibus。 (就个人而言,我在 使用-typedef阵营 - 但我没有特别的争吵 与那些不同的人。) 除了Joona的使用typedef的例子 澄清粗糙的函数声明,我找到的另一个地方 typedef有用的是在容纳关于C'类型大小的不确定性。例如,如果我需要一个能够表示高达一百万的值的整数 类型,那么使用`int''它是不安全的因为它可能只会高as 32767.`long''至少会达到2147483647,因此 就足够了,但在某些机器上long将会是 严重的过度杀伤和浪费空间。如果我需要存储大量的这些数字,我想使用最小的 可能的类型。 预处理器测试与typedef相结合,提供了一种方法,可以轻松地处理这个,并且具有最小的丑陋: #include< limits.h> #if CHAR_MIN< = -1000000&& 1000000< = CHAR_MAX typedef char Million; #elif SHRT_MIN< = -1000000&& 1000000< = SHRT_MAX typedef short Million; #elif INT_MIN< = -1000000&& 1000000< = INT_MAX typedef int百万; #else typedef long百万; / *已知足够* / #endif 此后,每当我的意思是'a $时我就可以写'百万' b $ b足够但不是不必要的宽整数: 百万* ptr = malloc(1234567 * sizeof * ptr); 百万最小,最大; 百万func(无效); ....等等;所有蹩脚决策的结果 已被方便地打包成单词Million。 但是,一个缺点就是说明了此代码: 百万价值= 42; printf(" value =%d \ n",value); / *错误* / 问题是,如果百万实际上证明是长的 别名,则 %d"格式说明符应该是%ld 。解决此问题的一种方法是将FMT_MILLION 宏定义为d。或ld或ld在上面的测试中;你可以 然后写 printf(" value =%" FMT_MILLION&qu​​ot; \ n",value); 这样可行,但写一些笨拙并使一些 种工具搞得一团糟,这些工具可以帮助将消息字符串翻译成多种语言。我更喜欢更简单的 printf(" value =%ld \ n",(long)value); ...即使它在运行时可能会花费更多。 简而言之:当你想隐藏时,typedef很方便 详细信息最终用户的某些类型决定 (可能是你自己)。 - Er ********* @sun.com 这篇关于使用typedef有什么好处吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云!
07-23 07:00
查看更多