相关疑难解决方法(0)

在C中强制执行强类型检查(typedefs的类型严格性)

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

c typedef typechecking strong-typing

35
推荐指数
6
解决办法
1万
查看次数

如果在参数列表中使用了另一个typedef类型的名称,则发出警告

考虑一个大型项目,其中有许多类型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(或某些静态代码分析工具)是否有选项可以发出警告?

c gcc

9
推荐指数
1
解决办法
787
查看次数

标签 统计

c ×2

gcc ×1

strong-typing ×1

typechecking ×1

typedef ×1