📜  为什么在C中需要严格的别名?

📅  最后修改于: 2021-05-25 20:50:33             🧑  作者: Mango

考虑下面的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基础课程》。