【发布时间】:2016-02-10 10:02:56
【问题描述】:
考虑以下示例代码:
#include <stdio.h>
int asdf = 5;
int main(void) {
sub(10);
return 0;
}
int sub (int asdf)
{
printf("%d\n",asdf);
}
在这种情况下,全局变量和局部参数都使用相同的名称,asdf。代码输出10,所以使用了局部变量。不会引发编译错误或警告。
全局变量仍然可以从sub() 中访问,当我将sub 的声明更改为
int sub (int asd)
代码输出 5。所以我知道sub() 可以访问全局变量,但它不能。
我无法在 c 标准中找到关于范围优先级的明确定义,所以我的问题是:
考虑到上述情况,命名局部变量和全局变量是否只是一种不好的做法,还是会引发错误/UB?
【问题讨论】:
-
使用全局变量是不好的做法,除非它们是常量。
-
它不是 UB,但可以肯定的是,您迟早会在代码中遇到错误。
-
另外值得注意的是,一些具有大量遗留代码和全局变量的大型项目,使用特殊前缀命名这些全局变量,这些前缀与其他变量不同
-
@MsYvette 当我将
sub的声明更改为int sub (int asd)时,基本上会更改局部变量名称。
标签: c