【发布时间】:2010-09-27 10:45:13
【问题描述】:
有没有办法对相同类型的 typedef 强制执行显式强制转换?我必须处理 utf8,有时我对字符数和字节数的索引感到困惑。所以最好有一些 typedef:
typedef unsigned int char_idx_t;
typedef unsigned int byte_idx_t;
此外,您需要在它们之间进行显式转换:
char_idx_t a = 0;
byte_idx_t b;
b = a; // compile warning
b = (byte_idx_t) a; // ok
我知道 C 中不存在这样的功能,但也许你知道一个技巧或编译器扩展(首选 gcc)可以做到这一点。
编辑 总的来说,我仍然不太喜欢匈牙利符号。由于项目编码约定,我无法将它用于这个问题,但我现在在另一个类似的情况下使用它,其中类型也相同并且含义非常相似。我不得不承认:它有帮助。我永远不会去声明每个整数都以“i”开头,但就像 Joel 的重叠类型示例一样,它可以挽救生命。
【问题讨论】:
-
还有一篇很好的文章(虽然我不同意禁止 goto :))来自Joel,名为Making Wrong Code Look Wrong。即使没有直接联系,我认为这与您的问题非常相关。
-
那篇文章中最“有趣”和最重要的事情,恕我直言,是关于匈牙利符号历史的一点。非常有趣...
标签: c typedef strong-typing typechecking