C89 gcc (GCC) 4.7.2
こんにちは、
私は誰かのソフトウェアを保守していて、静的構造のアドレスを返すこの関数を見つけました。static はそれがグローバルであることを示しているため、これは問題ないはずです。そのため、プログラムが終了するまで構造体のアドレスが使用可能になります。
DRIVER_API(driver_t*) driver_instance_get(void)
{
static struct tag_driver driver = {
/* Elements initialized here */
};
return &driver;
}
次のように使用します。
driver_t *driver = NULL;
driver = driver_instance_get();
ドライバー変数は、終了するまでプログラム全体で使用されます。
いくつかの質問:
- このようにすることは良い習慣ですか?
- ファイルレベルで関数の外で静的に宣言することに違いはありますか?
- メモリ プールを関数に渡し、メモリを構造体に割り当てて、構造体がヒープ上で宣言されるようにしてみませんか?
ご提案いただきありがとうございます。