我试图理解这个功能并将其转换为ctypes:
15 XDisplay* GetXDisplay() {
16 static XDisplay* display = NULL;
17 if (!display)
18 display = OpenNewXDisplay();
19 return display;
20 }
我们在这里看到if(!display)
然后执行display = OpenNewXDisplay();
但让我感到困惑的是,在display
NULL
static XDisplay* display = NULL;
{{1}}之上的那一行定义的人那么为什么在地球上需要if,如果他只是将它设置为null?以某种方式显示一个全局变量?
答案 0 :(得分:5)
display是 static 变量。
对于静态变量,初始化仅发生一次,而不是每次输入函数。这只是基本的C(也是基本的C ++,或基本的Objective-C)。
所以这段代码只是创建单例对象的一种原始方式。
答案 1 :(得分:1)
你应该阅读更多关于静态词的含义:
http://en.wikipedia.org/wiki/Static_variable
基本上它意味着变量只定义一次。这意味着在下次调用该函数时,变量的前一个值将保持不变。
所以它不是一个全局变量,因为它具有常规变量的范围,但保持其在函数调用上的值。
答案 2 :(得分:1)
正如显示之前提到的其他人是静态变量。
static 存储类指示编译器保留本地 在程序的生命周期中存在的变量而不是 每次进入和离开时创建和销毁它 范围。因此,使局部变量静态允许它们 在函数调用之间保持它们的值。
来源:http://www.tutorialspoint.com/cprogramming/c_storage_classes.htm