我试图用全局编译一个lib(我需要它),但我需要用函数的返回指针初始化这个常量全局。 但是如果有人可以有解决方案,海湾合作委员会不想为我的全球分配变量值。
error: initializer element is not constant
t_page_meta_data *const begin_meta_data = (t_page_meta_data *const)alloc_page(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()
。