有没有办法对相同类型的typedef强制执行显式转换?我要处理utf8,有时我会对字符数和字节数的索引感到困惑.所以有一些typedef很好:
typedef unsigned int char_idx_t;
typedef unsigned int byte_idx_t;
Run Code Online (Sandbox Code Playgroud)
除此之外,您需要在它们之间进行显式转换:
char_idx_t a = 0;
byte_idx_t b;
b = a; // compile warning
b = (byte_idx_t) a; // ok
Run Code Online (Sandbox Code Playgroud)
我知道C中不存在这样的功能,但也许你知道一个技巧或编译器扩展(更好的gcc).
编辑 我仍然不喜欢一般的匈牙利符号.由于项目编码惯例,我无法将它用于此问题,但我现在在另一个类似的情况下使用它,其中类型相同且含义非常相似.我不得不承认:它有所帮助.我永远不会用起始"i"来声明每个整数,但是就像Joel的重叠类型的例子一样,它可以挽救生命.
考虑一个大型项目,其中有许多类型typedef,例如
typedef int age;
typedef int height;
Run Code Online (Sandbox Code Playgroud)
和一些函数获取这些类型的参数:
void printPerson(age a, height h) {
printf("Age %d, Height %d\n", a, h);
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在编译时警告,如果这些参数是错误的类型,例如
age a = 30;
height h = 180;
printPerson(h, a); /* No warning, because a and h are both integers */
Run Code Online (Sandbox Code Playgroud)
在这种情况下,gcc(或某些静态代码分析工具)是否有选项可以发出警告?