gpt4 book ai didi

C - 程序结构(避免全局变量、包含等)

转载 作者:太空狗 更新时间:2023-10-29 17:18:10 25 4
gpt4 key购买 nike

我使用的是 C(不是 C++),我不确定如何避免使用全局变量。

我对 C 及其语法以及如何编写基本应用程序有相当不错的掌握,但我不确定构建程序的正确方法。

真正的大型应用程序如何避免使用全局变量?我很确定总是需要至少一些,但对于用 C 编写的大型游戏和其他应用程序,最好的方法是什么?

是否有任何我可以查看的严格用 C 语言编写的优秀开源软件?我想不出有什么特别的,它们中的大多数似乎都是用 C++ 编写的。

谢谢。

编辑

这是我在简单的 API Hook 应用程序中使用全局变量的示例,它只是另一个进程中的 DLL。

这个应用程序,特别是 Hook 另一个应用程序中使用的 API 函数。它通过使用 WriteProcessMemory 覆盖对原始调用并使其成为对我的 DLL 的调用来实现这一点。

但是,当unhook API函数时,我必须写回原来的内存/机器码。

因此,我需要为该机器代码维护一个简单的字节数组,一个用于 Hook 的每个 API 函数,而且有很多。

// Global variable to store original assembly code (6 bytes)
BYTE g_MessageBoxA[6];

// Hook the API function
HookAPIFunction ( "user32.dll", "MessageBoxA", MyNewFunction, g_MessageBoxA );

// Later on, unhook the function
UnHookAPIFunction ( "user32.dll", "MessageBoxA", g_MessageBoxA );

抱歉,如果这让您感到困惑。

最佳答案

"How do really big applications avoid the use of global variables?"

  1. 使用静态变量。如果函数需要在调用之间记住某些内容,请使用 this 而不是全局变量。示例:

    int running_total (int num) {
    static int sum = 0;
    sum += num;
    return sum;
    }
  2. 通过参数传递数据,以便值在一个地方定义,也许是 main() 并传递到需要它的地方。

  3. 如果所有其他方法都失败了,请继续使用全局但尝试减轻潜在问题。

    1. 至少,使用命名约定来尽量减少潜在的冲突。例如:Gbl_MyApp_DeveloperName。因此,所有全局变量都将以 Gbl_MyApp_ 部分开头——其中“MyApp”是对您的应用的描述。
    2. 尝试按目的对函数进行分组,以便所有需要给定全局的东西都在同一个文件中(在合理范围内)。然后可以定义全局变量并将其限制在该文件中(注意 extern 关键字)。

关于C - 程序结构(避免全局变量、包含等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3208531/

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