gpt4 book ai didi

c++ - C/C++ 静态 Voodoo

转载 作者:行者123 更新时间:2023-11-30 18:51:03 25 4
gpt4 key购买 nike

我正在开发一个包含 C 和 C++ 元素的程序。我不能说我是这个领域的专家,但我注意到静态变量的行为并不那么静态。具体来说,我异步接收事件,然后将事件推送到静态队列,同时主线程从该静态队列弹出事件。当我将事件推送到静态队列时,我可以清楚地看出队列增加了 1 并且数据已正确填充。当我从静态队列中轮询时,数据将会出现,并且队列大小为 0。为了确认它们充当不同的实例,我从异步和轮询的角度打印了它们的值,即使变量具有令人讨厌的静态,它们仍然保持一致的不同附于其上。当我从 .cpp 文件更新队列时,静态队列存储在 .c 文件中。我几乎肯定这不会引起问题,但谁知道呢。我被困住了

这是我存储在 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规范意味着它具有静态存储类并且符号(变量名称)仅在定义范围(即 block 的范围)中可见当它在函数中时,以及在全局范围内时在翻译单元(.c 文件)中。

静态并不意味着该元素不能通过函数或通过符号不可见的地方的指针来使用。

关于c++ - C/C++ 静态 Voodoo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38399200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com