C/C++ 静态巫毒教
C/C++ Static Voodoo
我正在开发一个包含 C 和 C++ 元素的程序。 我不能说我是这个领域的专家,但我注意到静态变量的行为并不是那么静态。 具体来说,我异步接收事件,然后将事件推送到静态队列,而主线程从该静态队列中弹出事件。 当我将事件推送到静态队列时,我可以清楚地告诉队列增加了 1 并且数据已正确填充。 当我从该静态队列轮询时,数据将进入并且队列大小为 0。 为了确认它们充当不同的实例,我从异步和轮询的角度打印了它们的值,即使变量附加了一个臭静态,它们也始终保持不同。 静态队列存储在 .c 文件中,而我从.cpp文件更新队列。 我几乎肯定这不会引起问题,但谁知道呢。 我被卡住了
这是我存储在interactivity_mapping文件中的两个变量...
/* Pointer storage */
static sdy_pointer_event_t pointer_events[MAX_POINTERS] = {0};
static int last_pointer_event = 0;
以下是存储在导入的函数c文件中的外部函数
/* Imported functions */
extern void GetId(SGLint32 (*WidgetId));
extern void ManageIndividualFocus(SGLbool RequestFocus, SGLbool RequestNoFocus, SGLint32 WidgetId, SGLbool IsContainer, SGLint32 NextWidgetId, SGLbool isInit, SGLint32 (*HasFocus));
extern void aol_keyboard(SGLint32 pKeyboard, SGLbool* pPressed, SGLbool* pReleased, SGLint32* pCode, SGLint32* pModifiers);
extern void aol_locate(SGLint32 pPointer, SGLfloat* pX, SGLfloat* pY);
extern void aol_pointer(SGLint32 pPointer, SGLbool* pPressed, SGLbool* pReleased, SGLint32* pButton, SGLfloat* pX, SGLfloat* pY, SGLint32* pModifiers);
extern void wrapper_PushButton(SGLint32 EmitCondition, SGLbool MouseInside, SGLbool MousePressed, SGLbool MouseReleased, SGLbool KeyPressed, SGLint32 KeyCode, SGLbool KeyReleased, SGLbool (*Selection), SGLbool (*ButtonPressed), wrapper_PushButton_mem* mem);
extern void wrapper_PushButton_reset(wrapper_PushButton_mem* mem);
基本上interactivity_mapping文件中有外部导入函数c文件的实现。 我异步调用的函数不是这个导入的函数 extern c 文件的一部分,而轮询函数是和被调用aol_pointer。 我不知道这是否会导致这种类型的错误行为。 该程序非常大,因此我认为如果不将整个内容倾倒在这里,我就无法提供更好的图片。
静态存储类意味着对象的生存期是程序的整个执行。变量的static
规范意味着它具有静态存储类,并且符号(变量名称)仅在定义范围内可见,即当它在函数中时是块,当它在全局范围内时在翻译单元(.c 文件)中可见。
static
并不意味着不能通过函数或通过符号不可见位置的指针使用该元素。
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- #为""定义宏;静态";针对不同的上下文
- cmake如何在fedora工作站中找到boost静态库包
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 将公共但非静态的成员函数与ALGLIB集成
- cmake在我的项目中所需的所有静态库都不成功
- C++从另一个类访问公共静态向量的正确方法是什么
- 基于boost的程序的静态链接——zlib问题
- 在静态库中嵌入类方法
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 如何在C++中获得"静态纯虚拟"功能?
- 私有类型的静态常量成员
- 使用gcc从静态链接的文件中查找可选符号
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 如何在C++中使用非静态成员函数作为回调函数
- 将静态库链接到不带-fPIC的共享库中
- 静态结构和一个定义规则
- 为什么虚函数不能是静态的和全局的?
- C++17中函数模板中的静态数组初始化(MSVC 2019)
- 停止cmake target_link_libraries将插件中静态库的两个对象文件链接到静态库本身