假设我有一个带有全局变量的* .c文件(在它具有文件范围的意义上是“全局”)和一个函数。函数是否可以将该变量作为要在其他翻译单元中使用的值返回?
我认为答案是肯定的。如果没有别的,我假设在C return中运行“复制”语义---返回表达式的值。但我不确定。
答案 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之外,应该首先避免使用全局变量。