我可以将const限定符应用于选择性函数的全局变量吗



考虑以下源文件:

#include <stdio.h>
int g_var_1;
int g_var_2;
// ...
void f1(void);
void f2(void);
// ...
int main(void)
{
    f1();
    f2();
    return 0;
}
void f1(void)
{
    // set the value of g_var_1
    g_var_1 = 100;
}
void f2(void)
{
    // read the value of g_var_1
    printf("%dn", g_var_1);
}
// ...

是否可以对某些函数(在同一翻译单元内)"应用promise",即g_var_1应被视为它们的只读全局变量?我试过这样的东西:

void f2(void)
{
    extern const int g_var_1; 
    // read the value of g_var_1
    printf("%dn", g_var_1);
}

但这会导致:

错误:'g_var_1'外部常量int的类型限定符冲突g_ var_1;

从本质上讲,我想限制在更复杂的代码中对全局变量进行意外修改的可能性(实数的值是已知的编译时),仍然不将它们"挂钩"为函数的参数,如:

void f2(const int g_some)
{
    printf("%dn", g_some); 
}

实现这一点的适当方法是将代码分离为模块,并将这些全局变量定义为静态,这将使它们仅模块可见,而不会将其符号导出到外部。然后,您可以添加一个getter函数来公开它们的值,而无需将它们暴露在模块外部的修改中。

最新更新