变量多重定义警告
Warning for variable Multiple Definition
我期待以下变量 var1 的多重定义的错误消息(或至少是警告)。这意味着这不是多重定义吗? main里面的变量作用域和main外部的作用域是不是不一样
#include <stdio.h>
int var1;
int main (void)
{
int var1;
var1=12;
printf("%d",var1);
}
Is the scope of the variable inside the main is different from its scope outside the main.
是的。它们是两个不同的变量。因此,不存在多变量定义错误。
使用以下程序验证它:
#include <stdio.h>
int var1;
void foo();
int main (void)
{
int var1;
var1=12;
printf("%d\n",var1);
foo();
}
void foo()
{
var1=20;
printf("%d\n",var1);
}
不,这不是多重定义,因为它们是在不同的范围内。在 main()
的范围内,您有一个不同的变量。通常,来自外部作用域的变量在内部作用域中也是有效的,但是有一个同名变量 shadows 外部作用域的变量。
也就是说,这通常只是 不好的做法,因为它很容易导致具有多个同名变量的错误。编译器 可以 尝试检测并警告它,但这可能会导致许多误报,因为它毕竟是合法的,有时还有很好的用途。
编辑:正如 cremno 在评论中指出的那样,GCC(以及 mingw)能够使用标志 -Wshadow
.
显示此类警告
正如其他人所说,就编译器而言,这些是不同的变量。在 main 函数之外声明的 int var1 存在于全局范围内,程序中的所有函数都可以访问它(在同一文件或其他使用 extern 编译和链接在一起的文件中声明)。
您在 Main 函数中声明的变量 int var1 位于您的 Main 函数所在的堆栈帧中 运行。虽然合法,但您所做的通常不被认为是好的做法,除非您有充分的理由,否则您应该避免这样做
我期待以下变量 var1 的多重定义的错误消息(或至少是警告)。这意味着这不是多重定义吗? main里面的变量作用域和main外部的作用域是不是不一样
#include <stdio.h>
int var1;
int main (void)
{
int var1;
var1=12;
printf("%d",var1);
}
Is the scope of the variable inside the main is different from its scope outside the main.
是的。它们是两个不同的变量。因此,不存在多变量定义错误。
使用以下程序验证它:
#include <stdio.h>
int var1;
void foo();
int main (void)
{
int var1;
var1=12;
printf("%d\n",var1);
foo();
}
void foo()
{
var1=20;
printf("%d\n",var1);
}
不,这不是多重定义,因为它们是在不同的范围内。在 main()
的范围内,您有一个不同的变量。通常,来自外部作用域的变量在内部作用域中也是有效的,但是有一个同名变量 shadows 外部作用域的变量。
也就是说,这通常只是 不好的做法,因为它很容易导致具有多个同名变量的错误。编译器 可以 尝试检测并警告它,但这可能会导致许多误报,因为它毕竟是合法的,有时还有很好的用途。
编辑:正如 cremno 在评论中指出的那样,GCC(以及 mingw)能够使用标志 -Wshadow
.
正如其他人所说,就编译器而言,这些是不同的变量。在 main 函数之外声明的 int var1 存在于全局范围内,程序中的所有函数都可以访问它(在同一文件或其他使用 extern 编译和链接在一起的文件中声明)。
您在 Main 函数中声明的变量 int var1 位于您的 Main 函数所在的堆栈帧中 运行。虽然合法,但您所做的通常不被认为是好的做法,除非您有充分的理由,否则您应该避免这样做