请考虑以下源文件:
#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);
}
答案 0 :(得分:1)
执行此操作的适当方法是将代码分离为模块,并将这些全局变量定义为静态,这将使它们只有模块可见,并且不会将其符号导出到外部。然后,您可以添加一个getter函数来公开它们的值,而不会将它们暴露给模块外部的修改。