C 中别名的说明是否正确?

Is the illustration on Aliasing in C correct?

我看到 link http://www.cs.uregina.ca/Links/class-info/cplusplus/Standards/Disk10/aliasing_c.html 关于 c 中的别名。那里的程序如下所示。

/********************************
An example of aliasing in C.

Output:
3
3

********************************/

#include < stdio.h >

int main()

{

   int G_Var = 2;

   /* call SomeFunction with the Global Variable as a parameter */

   SomeFunction(G_Var); 

   return 0;
}

/* InputVar becomes an alias fo G_Var */

void SomeFunction(int &InputVar)
{

   int G_Var;
   int InputVar;

   /* Global Variable is set to new value */

   G_Var = InputVar + 1;       

   /* Equivalent to G_Var = G_Var + 1 */

   printf("%i\n", InputVar);

   printf("%i\n", G_Var);

}

代码是否正确,是否按照代码中的注释工作?

编写 link 的人严重无能,不应该教 C。他们应该自己加入初学者 class。

  • int G_Var = 2;不是全局变量,它是一个局部变量,具有自动存储期限。 main() 中的一个和函数内部的一个。
  • 发布的代码是 C++,不是 C。C 没有引用。
  • 术语 alias/aliasing 指的是可以假定多个指针(或 C++ 引用)指向同一内存位置。
  • 函数中的
  • int InputVar; 与参数名称冲突,因此代码没有任何意义。如果没有名称冲突,变量将未初始化然后使用,这将毫无意义。

Is the code correct and is working according to what is commented in the code?

编写此示例的人非常困惑,以至于很难说出他们正在尝试教授什么,或者在这方面使用哪种语言。由于多种根本原因,代码无法编译。忘掉这个烂摊子吧。

四件事要说:

  1. C 没有 C++ 类型的 aliases/references。它只是一个 C++ 功能。

    所以,

    /* InputVar becomes an alias fo G_Var */
    
     void SomeFunction(int &InputVar)
    

    错了。

  2. G_Var 不是全局变量。您两次声明它是 mainSomeFunction 的本地。如果你想将 G_Var 声明为全局变量,它必须在全局范围内声明 一次 ,而不是在函数内部,并且只能通过它的名称访问它,而不是声明它的输入两次。

    但除此之外,不推荐使用全局变量。而是使用参数传递。

  3. SomeFunction() 未在 main() 中调用之前声明。通常这会给你一个诊断,因为编译器不知道 SomeFunction() 是什么。

  4. InputVar用作参考参数,但也在SomeFunction中声明了两次。这里有冲突。

我猜你在询问之前从未编译过这段代码,这是一个错误。它会回答您的许多问题,包括主要问题。

"Is the illustration on Aliasing in C correct?"

"Is the code correct and is working according to what is commented in the code?"

不,不是。整个代码有缺陷。

给人的印象是作者不知道如何编写正确的 C 或 C++ 代码。