考虑下面的C程序。
// A C program to demonstrate need of strict
// aliasing
#include
// Value of 'a' can be accessed/modified either
// through 'a' or through 'b'
int a = 5;
int* b = &a;
int func(double* b)
{
a = 1;
// The below statement modifies 'a'
*b = 5.10;
return (a);
}
int main()
{
printf("%d", func((double*)&a));
return 0;
}
输出 :
1717986918
如果我们将其称为“ func()” ,它将返回常量1。但是也可以将函数称为“ func((double *)&a)” ,该函数本应返回1,但返回其他值。使代码仅返回常数1!这是一个大问题,但是STRATI ALIASING修复了它。
解决方案 :
使用限制限定符关键字。这意味着您向编译器保证,某些东西不会使用指针限制关键字来作为别名。如果您违背诺言,您只会受苦。有关详细信息,请参阅C中的strict关键字。
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。