C89 海合會(GCC)4.7.2在函數返回一個靜態結構
你好,
我保持某人的軟件,我發現這個函數返回一個靜態結構的地址。這應該是好的,因爲靜態會指示它是全局的,所以結構的地址在程序終止之前可用。
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();
驅動變量是整個程序中使用,直到其終止。
一些問題:
- 它是很好的做法,以做到這樣嗎?
- 是否有任何區別,聲明它在文件級功能之外是靜態的?
- 爲什麼不傳遞一個內存池到函數中,並將內存分配給結構,以便在堆中聲明結構?
非常感謝您的任何建議,
這個結構特別大,你會非常關心它的出口? – 2013-05-09 14:48:30
如果結構是隻讀的,那麼函數可能應該返回一個指向「const」結構的指針。另外,什麼是'DRIVER_API'? – 2013-05-09 14:56:40
DRIVR_API是#define DRIVER_API(類型)EXTERN_C __declspec(dllexport)類型 – ant2009 2013-05-09 15:45:24