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

时间:2014-10-05 23:23:44

标签: c

请考虑以下源文件:

#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("%d\n", g_var_1);
}

// ...

对于某些函数(在同一个翻译单元中)是否可以“应用承诺”g_var_1应该被视为只读全局变量?我试过类似的东西:

void f2(void)
{
    extern const int g_var_1; 

    // read the value of g_var_1
    printf("%d\n", g_var_1);
}

但这会产生:

  

错误:'g_var_1'extern const int的冲突类型限定符   g_var_1;

基本上我想在更复杂的代码中限制意外修改全局变量的可能性(真实的值是已知的编译时),仍然没有将它们“挂钩”为函数的参数,如为:

void f2(const int g_some)
{
    printf("%d\n", g_some); 
}

1 个答案:

答案 0 :(得分:1)

执行此操作的适当方法是将代码分离为模块,并将这些全局变量定义为静态,这将使它们只有模块可见,并且不会将其符号导出到外部。然后,您可以添加一个getter函数来公开它们的值,而不会将它们暴露给模块外部的修改。