有没有办法对相同类型的 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 的重叠类型示例一样,它可以挽救生命。