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


我们将在此了解为什么我们在 C 中使用严格别名。在我们讨论这部分内容之前,让我们看一个代码,并尝试分析输出。

示例

#include<stdio.h>
int temp = 5;
int* var = &temp;
int my_function(double* var) {
   temp = 1;
   *var = 5.10; //this will change the value of temp
   return (temp);
}
main() {
   printf("%d", my_function((double*)&temp));
}

输出

1717986918

如果我们调用函数 my_function,它将返回 1。我们也可以使用 my_function((double*)&temp) 调用此函数。这本来应该返回 1,但这里我们可以看到它返回另一个对象。此代码的目的是仅返回常量 1。为了解决此问题,我们可以使用严格别名。

使用 restrict 限定符关键字。它指示我们向编译器承诺不会将任何内容与 restrict 指针关键字形成别名。如果我们违背承诺,则会出现一些问题。

更新于: 2019-07-30

140 次浏览

开启您的职业生涯

完成课程,获得认证

开始学习
广告