相关疑难解决方法(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万
查看次数

警告:隐式常量转换溢出

在下面的程序中,第5行确实提供了 预期的溢出警告,但令人惊讶的是,第4行在GCC中没有给出任何警告:http://www.ideone.com/U0BXn

int main()
{
    int i = 256;
    char c1 = i;    //line 4
    char c2 = 256;  //line 5
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在想这两行应该给出溢出警告.还是有什么我想念的?


导致我做这个实验的主题是:typedef类型检查?

在那里我说了以下(我从我的答案中删除了,因为当我运行它时,它没有像我预期的那样出现):

//However, you'll get warning for this case:

typedef int  T1;
typedef char T2;

T1 x = 256;     
T2 y = x; //possible overflow warning! (but it doesn't give warning :()
Run Code Online (Sandbox Code Playgroud)

c++ gcc warnings overflow integer-overflow

15
推荐指数
2
解决办法
7万
查看次数