c - 这是全局的吗?

标签 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();但令我困惑的是那个人在上面的行中定义了 displayNULL ( static XDisplay* display = NULL; ) 那么,如果他只是将其设置为空,那么到底为什么需要 if 呢? display 是一个全局变量吗?

最佳答案

display 是一个静态变量。

对于静态变量,初始化仅发生一次,而不是每次进入函数时都会发生。这只是基本的 C(也是基本的 C++,或基本的 Objective-C)。

所以这段代码只是创建单例对象的原始方法。

关于c - 这是全局的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27602246/

相关文章:

c - 将 char 赋值给 char - 意外行为

我可以通过发送带有 NULL 位图句柄的 STM_SETIMAGE 消息来清除静态控件中的位图吗

c++ - Clang - 将 C header 编译为 LLVM IR/位码

Python:使用 ctypes 的多维数组?

python - 使用 ctypes 在 python 中创建背景转换器,不工作

c++ - 在Python中解析.c/.cpp/.py源文件以获取包含的函数列表

c - 在c中包含自定义头文件

python - 通过自省(introspection)从 ctype 结构中获取元素?

python - Windows错误: [Error 127] The specified procedure could not be found

python - 如何在Python中创建空的C类型数组(或只是一个NULL值)?