如何让C函数使用外部变量且禁止修改?含全局变量场景问询
嘿,这俩问题问得很精准,咱们挨个拆解清楚:
问题1:能否让C函数使用外部变量,但禁止该函数修改这些变量?
当然可以!核心就是用const限定符给函数的访问权限上锁,有两种常用方案:
函数内声明外部变量为
const:如果外部变量是全局的,在函数内部把它的extern声明加上const修饰。比如全局变量定义是int x;,函数里这么写:extern const int x;这下函数里任何试图修改
x的操作(比如x = 10;)都会被编译器直接报错,彻底实现“只读不写”。封装只读接口:如果不想直接暴露全局变量,可以把变量藏在
.c文件里,只对外提供一个读取函数。比如:// 在某个.c文件里定义全局变量,static让它只在当前文件可见 static int x; // 对外提供的只读接口 int get_x(void) { return x; }其他函数只能通过
get_x()获取x的值,根本没机会修改它,安全性拉满。
问题2:若存在全局变量x,C函数
int foo() { extern int x; return x; }能否禁止foo修改x?即让x的处理方式与下述替代写法一致:int foo(const int x) { return x; } 必须可以!只需要给函数里的extern声明加上const就行,修改后的代码如下:
int foo() { extern const int x; return x; }
这样在foo函数内部,x就被当成了只读的const变量,和int foo(const int x)里的参数x完全一样——任何修改x的尝试都会触发编译错误,从语法层面锁死修改权限。
这里有个细节要注意:全局变量本身的可修改性,和函数内部的const声明是相互独立的。哪怕全局变量实际定义是int x;(可修改),只要函数里声明成extern const int x,编译器就会在这个函数范围内强制只读,完全达到你想要的效果。
内容的提问来源于stack exchange,提问作者DJames
相关产品推荐
相关产品推荐

