私は C (C++ ではない) を使用していますが、グローバル変数の使用を避ける方法がわかりません。
私は C とその構文、および基本的なアプリケーションの書き方についてかなりよく理解していますが、プログラムを構成する適切な方法については確信が持てません。
本当に大きなアプリケーションは、グローバル変数の使用をどのように回避するのでしょうか? 少なくともいくつかは常に必要になると確信していますが、大規模なゲームや C で記述されたその他のアプリケーションの場合、それを行う最善の方法は何ですか?
厳密に C で書かれたオープンソースのソフトウェアで、私が見ることができるものはありますか? 頭に浮かんだことは何も思い浮かびません。それらのほとんどは C++ で書かれているようです。
ありがとう。
編集
これは、別のプロセス内の単なる DLL である単純な API フック アプリケーションでグローバル変数を使用する場所の例です。
このアプリケーションは、具体的には、別のアプリケーションで使用される API 関数をフックします。これは、WriteProcessMemory を使用してオリジナルへの呼び出しを上書きし、代わりに DLL への呼び出しにすることによって行われます。
ただし、API 関数をフック解除するときは、元のメモリ/マシン コードを書き戻す必要があります。
そのため、そのマシン コード用に単純なバイト配列を維持する必要があります。フックされている API 関数ごとに 1 つずつありますが、その配列はたくさんあります。
// 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 );
混乱している場合は申し訳ありません。