假设我有一个 *.c 文件,其中包含一个全局变量(“全局”,因为它具有文件范围)和一个函数。该函数可以将该变量作为值返回以在其他翻译单元中使用吗?
我认为答案是“是的”。如果不出意外,我假设在 C 中 return 在“复制”语义下运行——返回表达式的值被返回。但我不确定。
假设我有一个 *.c 文件,其中包含一个全局变量(“全局”,因为它具有文件范围)和一个函数。该函数可以将该变量作为值返回以在其他翻译单元中使用吗?
我认为答案是“是的”。如果不出意外,我假设在 C 中 return 在“复制”语义下运行——返回表达式的值被返回。但我不确定。
是的。你是对的:如果你返回类似 an 的东西int
,那么你将返回它当前的副本。如果您返回一个指针,您将让他们访问变量本身。
嗯,有这样的吗?
交流
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
如果我是迂腐的,我会说不。它可以返回一个全局变量的值。该值将是即时副本,而不是参考。也就是说当全局改变时,值不会改变。
除此之外,出于各种原因,应首先避免使用全局变量。
我认为答案是“是的”。如果不出意外,我假设在 C 中 return 在“复制”语义下运行——返回表达式的值被返回。但我不确定。
你是对的。
假设我有一个带有全局变量的 *.c 文件(“全局”,因为它具有文件范围)
请记住,在 .c 文件中全局声明变量会使其成为全局period。如果您希望它限制在文件范围内,请使用static
修饰符。您仍然可以通过函数将值传递出去。