0

假设我有一个 *.c 文件,其中包含一个全局变量(“全局”,因为它具有文件范围)和一个函数。该函数可以将该变量作为值返回以在其他翻译单元中使用吗?

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

4

4 回答 4

5

是的。你是对的:如果你返回类似 an 的东西int,那么你将返回它当前的副本。如果您返回一个指针,您将让他们访问变量本身。

于 2012-04-20T18:19:30.137 回答
3

嗯,有这样的吗?

交流

int foo = 3;

int get_foo() { return foo; }

主程序

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

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

输出:

3

于 2012-04-20T18:39:48.260 回答
1

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

除此之外,出于各种原因,应首先避免使用全局变量。

于 2012-04-20T18:46:23.853 回答
1

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

你是对的。

假设我有一个带有全局变量的 *.c 文件(“全局”,因为它具有文件范围)

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

于 2012-04-20T18:20:50.270 回答