我想声明一个常量全局变量并用函数初始化它。问题是,我无法使用我的函数来初始化它,因为函数调用不是编译器时常量,但我也无法拆分声明和初始化,因为它是 const 变量。
例如以下代码是无效的。
#include <stdio.h>
int my_function(void){
return 42;
}
const int const_variable = my_function();//invalid: my_function() is not
//a compiler-time constant
/*main() here*/
#include <stdio.h>
const int const_variable;
const_variable = 10;//invalid: can't modify a const-qualified type (const int)
/*main() here*/
我寻找一些答案。我看到有人建议在声明后使用指针来修改 const 变量的值,但这可能会导致严重的可读性、可移植性和调试问题。
有什么简单、便携的方法可以解决我的问题吗?
如何声明全局const变量并用C中的函数初始化它?
没有办法。这是不可能的。
有什么简单、便携的方法可以解决我的问题吗?
没有。
您可以使用宏
#define MY_FUNCTION() (42)
。
您可以编写一个单独的程序,该程序使用该 C 函数(或用完全不同的语言编写),生成带有该常量的 C 源代码,然后将生成的源代码与您的项目一起编译。
或者您可以切换到具有更多功能的不同编程语言,例如 Rust、D、C++。
全局常量在 C 中的工作方式不同。
如果全局范围变量需要保护以防止任何进一步的更改,则表明您需要封装它。
创建一个 protected_variable_setter 和一个 getter。让 setter 仅对初始化变量的文件已知。然后仅通过 getter 访问变量。