c - 我应该更好地使用全局变量吗?

标签 c variables struct global-variables

我想使用GMainLoop。我想知道使用全局变量还是局部变量更好。我想每 5 秒调用一个函数。它使用一些堆变量,我只想 malloc 一次。我有两个想法。我可以将所有参数放在一个结构中。但有时它会是结构中的结构。因此,名称命名法将变得复杂且可读性差。我还可以使所有数据全局化。它会是这样的:

typedef struct data_t
{
  unsigned char *pUncompressStreamData;
  unsigned char *pStartUncompressStreamData
  analyzers_t analyzers;
  GTree *tree;
}data_t;
main_loop(data_t data )
{
   //data_mallocs and other stuff
} 
int main()
{
    data_t data;

    g_timeout_add_seconds ( 5, main_loop, data);
    /free all data member
} 

或者

unsigned char *pUncompressStreamData;
unsigned char *pStartUncompressStreamData
analyzers_t analyzers;
GTree *tree;

main_loop(data_t data )
{
   //data_mallocs and other stuff
} 
int main()
{

    g_timeout_add_seconds ( 5, main_loop, NULL);
    /free all data member
} 

请给我线索。

最佳答案

使用局部变量或结构(更易读且更模块化)。请注意,您可以通过它们,例如作为一些struct的地址,作为g_timeout_add_seconds的客户端数据。所以更喜欢第一个版本而不是第二个版本。但是,您的 main 应该初始化 data 例如使用calloc,然后在 Glib 事件循环之后free它。

关于c - 我应该更好地使用全局变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22145725/

相关文章:

python - 如何在python中使用struct/class的 vector

c# - IList<mutable_struct> 与 mutable_struct[]

c - 通过 UDP 发送大文件

c - 使用短写入格式化字符串 : 4 bytes off

javascript - 为什么这个变量还活着?

c - 为什么 C 中未初始化的变量仍然产生输出

javascript - 检查 Javascript 中是否存在变量的最佳方法?

c - 打开函数不返回串口

c - 变量从函数返回中获取变量值

c++ - 结构中固定大小的数组是否需要在 C++ 析构函数中显式销毁?