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?
编写此示例的人非常困惑,以至于很难说出他们正在尝试教授什么,或者在这方面使用哪种语言。由于多种根本原因,代码无法编译。忘掉这个烂摊子吧。
四件事要说:
C 没有 C++ 类型的 aliases/references。它只是一个 C++ 功能。
所以,
/* InputVar becomes an alias fo G_Var */
void SomeFunction(int &InputVar)
错了。
G_Var
不是全局变量。您两次声明它是 main
和 SomeFunction
的本地。如果你想将 G_Var
声明为全局变量,它必须在全局范围内声明 一次 ,而不是在函数内部,并且只能通过它的名称访问它,而不是声明它的输入两次。
但除此之外,不推荐使用全局变量。而是使用参数传递。
SomeFunction()
未在 main()
中调用之前声明。通常这会给你一个诊断,因为编译器不知道 SomeFunction()
是什么。
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++ 代码。
我看到 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?
编写此示例的人非常困惑,以至于很难说出他们正在尝试教授什么,或者在这方面使用哪种语言。由于多种根本原因,代码无法编译。忘掉这个烂摊子吧。
四件事要说:
C 没有 C++ 类型的 aliases/references。它只是一个 C++ 功能。
所以,
/* InputVar becomes an alias fo G_Var */ void SomeFunction(int &InputVar)
错了。
G_Var
不是全局变量。您两次声明它是main
和SomeFunction
的本地。如果你想将G_Var
声明为全局变量,它必须在全局范围内声明 一次 ,而不是在函数内部,并且只能通过它的名称访问它,而不是声明它的输入两次。但除此之外,不推荐使用全局变量。而是使用参数传递。
SomeFunction()
未在main()
中调用之前声明。通常这会给你一个诊断,因为编译器不知道SomeFunction()
是什么。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++ 代码。