有没有办法对相同类型的 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)可以做到这一点。
EDIT总的来说,我仍然不太喜欢匈牙利符号。由于项目编码约定,我无法使用它来解决这个问题,但我现在在另一个类似的情况下使用它,其中类型也相同,含义也非常相似。我必须承认:这很有帮助。我永远不会去声明每个以“i”开头的整数,但正如 Joel 的重叠类型示例中那样,它可以挽救生命。
对于“句柄”类型(不透明指针),微软使用声明结构然后 typedef 指向该结构的指针的技巧:
#define DECLARE_HANDLE(name) struct name##__ { int unused; }; \
typedef struct name##__ *name
然后代替
typedef void* FOOHANDLE;
typedef void* BARHANDLE;
They do:
DECLARE_HANDLE(FOOHANDLE);
DECLARE_HANDLE(BARHANDLE);
所以现在,这有效:
FOOHANDLE make_foo();
BARHANDLE make_bar();
void do_bar(BARHANDLE);
FOOHANDLE foo = make_foo(); /* ok */
BARHANDLE bar = foo; /* won't work! */
do_bar(foo); /* won't work! */
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)