【发布时间】:2020-10-28 20:39:11
【问题描述】:
我有一个这样的全局变量列表:
int a, b, c, d;
这些变量用于计算它们的函数,例如:
int my_func(string x)
{
//count var a//
}
现在我想使用“a”,例如'b' 作为我这样声明的另一个函数的参数:
int multiplication(int a, int b);
并以这种方式定义:
int multiplication(int a, int b)
{
c = a * b;
return c;
}
当我运行它时,我得到以下错误:
ac.c:75:27: error: declaration shadows a variable in the global scope [-Werror,-Wshadow]
int multiplication(int a, int b)
^
ac.c:7:41: note: previous declaration is here
int a, b, c, d;
我该如何解决?当我尝试在函数中声明这些变量时,整个程序会返回很多错误。
【问题讨论】:
-
你不能简单地使用不同的变量名吗?您可以重新允许变量隐藏,但通常更清楚的是不要对多个变量使用相同的名称。
-
如果它们是全局的,为什么将它们作为参数传递......但是,你不应该使用全局变量,你根本不会有重复/隐藏变量名的问题.
-
在函数中访问全局状态被认为是一个糟糕的设计选择,因为它使您的程序成为tightly coupled 的一部分。改变全局变量是一个更糟糕的设计选择。只要有可能,尽量使函数只通过参数传递所有相关数据。像
multiplication这样的数学函数绝对没有理由访问或改变全局状态。 -
请注意,您的错误并不是真正的错误:这是您的编译器非常有用(保持原样)。如果您真的想按照自己的方式进行操作(坏主意),只需使用不同的编译器选项进行编译,特别是省略
-Werror(这会将警告变成错误)。
标签: c function declaration