As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center用于指导。
7年前关闭。
我已经开始用C语言编程,一般来说,我正在寻找“最佳实践”来构建我的代码。
我以前主要使用面向对象语言,现在开始采用这些语言的一些实践。
我的具体问题是:这段代码被认为是“可接受的”C代码,还是我遇到了一个常见的陷阱,让人们试图使用C中的封装?
是具有文件范围和外部链接(以及静态存储持续时间)的变量。这种类型的链接意味着它可以从作用域中具有
所以,如果你想听起来像个专业人士,每当你想说出“全局变量”的时候,深吸一口气,说出带有文件范围和外部链接的单词object。这会让你在所有C类面试中大放异彩:-)
如果有人质疑你关于缺乏“全局”变量的智慧,你甚至可以向他们证明。全球变量无处不在,对吧?但是在C语言中,对象的作用域直到它的声明才开始。由于缺少真正的全局变量,因此无法向前引用
当你交换这两条线时,它确实起作用。
7年前关闭。
我已经开始用C语言编程,一般来说,我正在寻找“最佳实践”来构建我的代码。
我以前主要使用面向对象语言,现在开始采用这些语言的一些实践。
我的具体问题是:这段代码被认为是“可接受的”C代码,还是我遇到了一个常见的陷阱,让人们试图使用C中的封装?
// A.h
void setValue(int);
int getValue();
// A.c
#include "A.h"
int my_private_value;
void setValue(int v)
{
my_private_value = v;
}
int getValue(void)
{
return my_private_value;
}
最佳答案
迂腐:C中没有全局变量。变量有作用域、存储持续时间和链接这些都没有“全球”的资格。
那到底是怎么回事你的
int my_private_value;
是具有文件范围和外部链接(以及静态存储持续时间)的变量。这种类型的链接意味着它可以从作用域中具有
extern int my_private_value
声明的任何其他文件中引用为了避免这种情况,变量必须具有内部链接。要声明具有内部链接的变量,请使用static
关键字:static int my_private_value;
所以,如果你想听起来像个专业人士,每当你想说出“全局变量”的时候,深吸一口气,说出带有文件范围和外部链接的单词object。这会让你在所有C类面试中大放异彩:-)
如果有人质疑你关于缺乏“全局”变量的智慧,你甚至可以向他们证明。全球变量无处不在,对吧?但是在C语言中,对象的作用域直到它的声明才开始。由于缺少真正的全局变量,因此无法向前引用
int *foo = &bar; /* Doesn't work in C: bar is not (yet) in scope. */
int bar = 42;
当你交换这两条线时,它确实起作用。
关于c - 在c中将变量声明为全局变量或封装它们,并使用getter和setter ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12436456/