如何声明全局const变量并用C中的函数初始化它?

问题描述 投票:0回答:2

我想声明一个常量全局变量并用函数初始化它。问题是,我无法使用我的函数来初始化它,因为函数调用不是编译器时常量,但我也无法拆分声明和初始化,因为它是 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 变量的值,但这可能会导致严重的可读性、可移植性和调试问题。

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

c constants global-variables
2个回答
2
投票

如何声明全局const变量并用C中的函数初始化它?

没有办法。这是不可能的。

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

没有。

您可以使用宏

#define MY_FUNCTION()  (42)

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

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


0
投票

全局常量在 C 中的工作方式不同。

如果全局范围变量需要保护以防止任何进一步的更改,则表明您需要封装它。

创建一个 protected_variable_setter 和一个 getter。让 setter 仅对初始化变量的文件已知。然后仅通过 getter 访问变量。

© www.soinside.com 2019 - 2024. All rights reserved.