我正在阅读此主题:Typecasting variable with another typedef
type_b *sample_b = (type_b *) ((void *) &sample);
(void *) 不是无关的吗? &sample 将返回一个类型的指针:type_a,可以直接转换为 (type_b *)。为什么额外的(void *)?我觉得这是错误的,但我对我的 C 没有足够的信心 - 因此需要额外的验证。
最佳答案
GCC 有能力优化代码,因为它检测到两个指向不兼容类型的指针指向相同的内存位置。使用这两个指针访问该值将发出有关别名违规的警告(“类型双关”)。
有时,如果您在一个转换操作数之间放置一个 (void*)
转换,然后再转换为另一个点类型,will silence false positive warnings在您可以合法地进行这种重叠访问的情况下。
关于c - : type_a sample; type_b *sample_b = (type_b *) ((void*) &sample); 中的无关(void *),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6800935/