加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C是否提供了一种将外部变量声明为“只读”的方法,但是将其定义为

发布时间:2020-12-16 10:09:40 所属栏目:百科 来源:网络整理
导读:我正在使用GCC C为嵌入式产品开发硬件抽象库.在库中,有一个变量应该对链接库的应用程序是只读的,但可以在定义它的编译单元中进行修改. 是否有一种标准的,可接受的方式来声明允许应用程序读取变量中的值的整数(在库头文件中),但是如果尝试生成写回写的代码,则
我正在使用GCC C为嵌入式产品开发硬件抽象库.在库中,有一个变量应该对链接库的应用程序是只读的,但可以在定义它的编译单元中进行修改.

是否有一种标准的,可接受的方式来声明允许应用程序读取变量中的值的整数(在库头文件中),但是如果尝试生成写回写的代码,则告诉编译器生成错误对吗?
例如,如果我要将函数声明为:

extern void foo(int const bar);

…然后允许调用者传递局部变量:

int bar = 0;
foo(bar);

…但是如果函数声明尝试写入bar:

void foo(int const bar)
{
    bar = 99;
}

…然后编译器会报告错误:分配只读位置“bar”.

将const放在名称之前的语法似乎不会以与函数参数相同的方式应用于变量,并且下面的两行似乎实际上是等效的:

extern const int x;
extern int const y;

…因为将y定义为int y;导致错误:’y’的冲突类型限定符,正如我所期望的那样,x被定义为int x;.

我知道我可以通过声明和定义一个返回值的访问器函数(它只能用作r值)来解决这个问题.

我在这里已经阅读了许多相关的问题,但是我找到的没有提供C的确定答案(而不是C或C#):

C — Accessing a non-const through const declaration

Mixing extern and const

有人可以指出我如何实现它的一个例子的方向,或者证实我怀疑它在语法上是不可实现的吗?

解决方法

Within the library there is a variable that should be read-only to the application that links the library,but can be modified from within the compilation unit that defines it.

解决方案是使用面向对象的设计,即称为私有封装的东西.

module.h中

int module_get_x (void);

的module.c

static int x;

int module_get_x (void)
{
  return x;
}

main.c中

#include "module.h"

int main(void)
{
  int value = module_get_x();
}

如果变量必须在模块内部进行读写,那么这是执行此操作的唯一正确方法.所有其他方式只是意大利面条编程的一些风格.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读