C:函数可以返回一个全局变量吗?

时间:2012-04-20 18:17:20

标签: c global-variables return

假设我有一个带有全局变量的* .c文件(在它具有文件范围的意义上是“全局”)和一个函数。函数是否可以将该变量作为要在其他翻译单元中使用的值返回?

我认为答案是肯定的。如果没有别的,我假设在C return中运行“复制”语义---返回表达式的值。但我不确定。

4 个答案:

答案 0 :(得分:5)

是。而且你是对的:如果你返回像int这样的东西,那么你将返回它当前的副本。如果你返回一个指针,你就可以让他们访问变量本身。

答案 1 :(得分:3)

嗯,这样的事情?

<强>交流转换器

int foo = 3;

int get_foo() { return foo; }

<强>的main.c

#include <stdio.h>    
#include "a.c"

int main(void)
{
    printf("%d\n", get_foo());
    return 0;
}

输出:

3

答案 2 :(得分:1)

  

我认为答案是肯定的。如果不出意外,我认为在C中   return在“复制”语义下运行---返回的值   表达式返回。但我不确定。

你是对的。

  

假设我有一个* .c文件,其中包含一个全局变量(“global”)   感觉它有文件范围)

请注意,在.c文件中全局声明变量会使其成为全局期间。如果您希望将其限制为文件范围,请使用static修饰符。您仍然可以通过函数传递值。

答案 3 :(得分:1)

如果我迂腐,我会拒绝。它可以返回全局变量的。该值将是一个瞬时副本,而不是参考。也就是说,当全球变化时,价值不会改变。

除了for all sorts of reasons之外,应该首先避免使用全局变量。