如何声明一个全局 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++。
我想声明一个常量全局变量并用函数初始化它。问题是,我不能使用我的函数来初始化它,因为函数调用不是编译器时间常量,但我也不能拆分声明和初始化,因为它是一个常量变量。
例如,以下代码无效。
#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++。