c - 嵌入式系统中封装的意图

标签 c variables encapsulation

我对 C 编程有点陌生,我想问一个特定的问题。 我正在使用 MPLAB c18 编译器。

起初,当我开始编码并以很多变量结束时,有些是全局变量,有些是外部变量。

我在一篇关于变量封装的文章中找到了某句话。

Replacing
 float x;
 float y;
 float z;

 with these
 float X();
 float Y();
 float Z();

这是一个意图吗

local variables inside the respective functions and assign

local float x= float x(); local float y= float y();

非常感谢您在这种情况下的投入和澄清。关于解释,我错了吗? 所以我的问题是,封装是否是为了减少全局并在函数中使用更多的局部变量?

问候

最佳答案

替换“float x”(可能是某些 header 中的 extern float x)有效地封装了变量。
您可能需要这样的东西:

float x(); /* get x */
void setX(float newVal); /* set x here */

但这很笼统,真正的实现需要根据您的需求量身定制(您需要 setter 吗?您需要 getter 吗?您需要优化它吗?)。
一般来说,特别是如果您是 C 语言的新手,封装有助于实现更简洁的设计并防止简单的错误。
例如,假设更改值 X 涉及执行其他一些任务(例如,X 是核导弹发射序列的倒计时)。
封装时,您的代码将类似于:

void setX(float newVal){
    x = newVal;
    startNuclearLaunchSequence();
}

如果您没有此 setter ,则需要找到您设置 X 的所有位置(也可能是您的同事设置的)并手动发射火箭,否则您会失火然后 - 再见天启。
我们不希望这样,对吗?

关于c - 嵌入式系统中封装的意图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21935273/

相关文章:

JavaScript 控制台没有正确的值

java - 使用继承时如何进行强封装?

java - 类的 getters() 和 setters() 简化

c - libvlc_media_get_duration 总是返回 0

c - 我用 C 编写了一个简单的程序来计算数字的阶乘

C - 嵌套 For 循环永不停止

python - 在Python中的正则表达式中使用变量

c - PE 文件 .text 部分大小

swift - Swift 中泛型变量的解决方法

java - 内部类是否使封装的概念无效?