typedef struct
{
int age;
int number;
} person;
static person self;//global declaration
person *Self(){
return &self;
}
Run Code Online (Sandbox Code Playgroud)
我一直在尝试理解上面的类似代码,该代码在大型代码库中使用,任何帮助将不胜感激。
Self()C 函数?这个特定的片段没有多大意义。
static可以用作“穷人的私有封装”,如果一个对象保证是“单例”——也就是说,只有一个实例存在并且不能被多个线程访问。
在这种情况下,变量的范围缩小到本地.c文件static。并Self充当“吸气剂”功能。(作为多线程环境中的单例,您可以将互斥体/信号量放置在 setter/getter 函数中,这样这将是它们的另一种用途。)
然而,虽然这样的设计在某些情况下可能有意义,但返回const指向私有变量的非限定符指针与跳过私有封装并使用全局/文件范围变量一样糟糕的设计。
根据以上内容回答您的问题:
- 为什么我们需要像上面的 C 语言中的 Self() 函数这样的函数?
如果它返回一个const合格的指针,那么它作为一个 getter 函数就有意义了。就目前而言,它只是臃肿且糟糕的设计。
- 有什么好处?
- 有什么缺点吗?
就代码而言,没有好处,只有缺点。这看起来像是一次拙劣的实现私有封装的尝试。
为了在 C 中进行正确的多实例私有封装,您不会使用static所谓的“不透明类型”。下面是一个例子:How to do private encapsulation in C?