visual-c – Visual C是否支持“严格别名”?

前端之家收集整理的这篇文章主要介绍了visual-c – Visual C是否支持“严格别名”?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我最近惊讶地发现C和C语言标准有一个“严格别名”规则.实质上,该规则禁止不同类型的变量引用相同的内存位置.

举个例子:

char buffer[4] = { 0x55,0x66,0x77,0x88 };
int32 *p = (int32*)&buffer[0]; // illegal because buffer[0] and *p are different types

我与之交互的大多数专业C开发人员都不熟悉此规则.根据我的研究,它似乎主要影响GCC / G / CLANG用户. Visual C是否支持启用/禁用此规则?如果是这样,一个人怎么做?

谢谢

解决方法

“严格别名”是限制程序而不是编译器的C规则.由于违反规则是Undefined Behavior,因此无需任何诊断,编译器无需以任何方式支持它.

也就是说,微软在应用优化方面不那么积极.仅在上周他们就宣布了他们的新优化器assumes no signed overflow,这是GCC已经假设几年的事情.严格的别名会破坏一些Windows标题,因此需要先修复它们. (有几种类型的行为就好像它们包含了工会,但它们并没有正式定义)

猜你在找的C&C++相关文章