如何声明一个全局 const 变量并用 C 中的函数对其进行初始化?

How to declare a global const variable and initialize it with a function in C?

我想声明一个常量全局变量并用函数初始化它。问题是,我不能使用我的函数来初始化它,因为函数调用不是编译器时间常量,但我也不能拆分声明和初始化,因为它是一个常量变量。

例如,以下代码无效。

#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变量的值,但这可能会导致严重的可读性、可移植性和调试问题。

有什么简单、便携的方法可以解决我的问题吗?

How to declare a global const variable and initialize it with a function in C?

没有办法。不可能。

Is there any simple, portable way to solve my problem?

没有

您可以使用宏 #define MY_FUNCTION() (42)

您可以编写一个单独的程序,使用该 C 函数(或用完全不同的语言编写),生成 C 源代码,其中包含该常量和生成的源代码然后代码会与您的项目一起编译。

或者您可以切换到具有更多功能的不同编程语言,例如 Rust、D、C++。