gpt4 book ai didi

c - C 中只读变量的 Getter

转载 作者:太空宇宙 更新时间:2023-11-04 01:01:29 25 4
gpt4 key购买 nike

我正在编写一个库。这个库有一个 init() 函数来初始化一些内部变量。这些变量必须可以从外部访问,但只能是只读的。

因为我在嵌入式设备上工作,它太庞大了,没有真正的 getter 功能。

除了这两个(假设它们都是不好的解决方案),我还能使用什么好的解决方案:

使用内联 getter(其中_internal_parameter 不能是static):

inline int get_parameter() { extern int _interal_parameter; return _internal_parameter; }

使用 const(其中 const 变量并未真正受到保护):

// lib.c
void init() {
*(int*)&parameter = get_value_for_parameter();
}

// lib.h
extern const int parameter //!< initialized by init();

最佳答案

在 C 中,使数据私有(private)化的唯一方法是将其隐藏在编译单元中。这可以通过使用静态变量(如果变量是全局变量)或通过在将使用它的编译单元中定义结构来实现。

然后您可以声明一个非静态函数,该函数通过值或常量引用(使用常量指针)返回值。这将迫使您创建一个普通函数。内联将无济于事,因为变量隐藏在编译单元中。

如果函数的开销太高,您将被迫将变量声明为非静态变量(或声明您的结构)。在这种情况下,没有什么可以阻止您的用户更改变量。

可能还有第三种方法,那就是将您的变量声明为静态的,然后创建一个指向将在函数外部公开的变量的非静态常量指针。在这种情况下,用户仍然可以使用强制转换进行修改。

关于c - C 中只读变量的 Getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37211186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com