如何将返回的函数值赋给const全局变量

时间:2018-04-20 12:45:29

标签: c linux

我试图用全局编译一个lib(我需要它),但我需要用函数的返回指针初始化这个常量全局。 但是如果有人可以有解决方案,海湾合作委员会不想为我的全球分配变量值。

error: initializer element is not constant
t_page_meta_data *const begin_meta_data = (t_page_meta_data *const)alloc_page(1);

感谢。

1 个答案:

答案 0 :(得分:1)

据我所知,你不能用C const全局变量来做这件事。但是,如果您仍希望公开一些只读全局,则可以执行以下操作:

static t_page_meta_data *real_begin_meta_data;
t_page_meta_data *const *const begin_meta_data = &real_begin_meta_data;

int main()
{
    real_begin_meta_data = (t_page_meta_data*)alloc_page(1);
    // begin_meta_data = NULL  <= error
    // *begin_meta_data = NULL <= error
}

begin_meta_data将作为指向static变量real_begin_meta_data的全局变量公开。对于全球用户来说,它是一个额外的间接层,但它可以工作。请注意**begin_meta_data是非常量的 - 这相当于问题代码中*begin_meta_data是非常量的。

另一种方法是使用函数而不是全局变量:

static t_page_meta_data *real_begin_meta_data;
t_page_meta_data *begin_meta_data()
{
    return real_begin_meta_data;
}

int main()
{
    real_begin_meta_data = (t_page_meta_data*)alloc_page(1);
}

现在用户只需使用begin_meta_data()来获取指针。显然他们无法改变它指向的内容,因为他们看不到real_begin_meta_data。但是他们仍然可以在代码中修改*begin_meta_data()