【发布时间】:2013-11-27 22:11:21
【问题描述】:
在C语言中,假设var1是foo1()中的一个变量,foo2()想访问var1,但是foo1()没有调用foo2(),所以我们不能通过参数传递。同时,只有 foo1() 和 foo2() 会访问它,所以我不想将它声明为全局变量。与c++中的“朋友语义”类似,有什么方法可以在C中实现吗?
void foo1() {
...
var1;
....
}
void foo2() {
...
how to access var1?
...
}
【问题讨论】:
-
“朋友”的想法与类和私有/受保护的成员有关。在函数中,您只能使用全局变量。 codingunit.com/c-tutorial-functions-and-global-local-variables
-
还有另一种方式,没有人在他们的回答中强调,它是静态全局的概念,我通常不会推荐它,但是在 C 中,在 C 文件中,如果你声明静态整数变量1;它仅对该文件中的函数可见。所以如果你有 foos.c 和这两个 foo 函数,两者都可以访问 var1,文件之外的任何东西都不能使用它。仍然不好,但它限制了全局的范围。基本上在 C 中,public/private/friends 不是一个受支持的概念,它基本上只是一个大狂欢,任何人都可以戳别人的位。
-
@KeithNicholas 是的。我认为静态全局会做。
-
我建议一般不要使用它,它只是那些经常使 C 代码难以维护/更改的事情之一。
-
@ryyker 我绝对不建议这样做。如果您想要那种东西,我建议将静态全局范围限定为文件,然后将“getter 函数” int getVar1() 放入返回静态全局的头文件中。