这是全球性的吗?

时间:2014-12-22 11:55:48

标签: c ctypes

我试图理解这个功能并将其转换为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?以某种方式显示一个全局变量?

3 个答案:

答案 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