编程语言及工具
C++ 仍然是嵌入式开发的少数语言,但当项目变得太大而无法有效使用 C 时,开发人员通常会采用 C++。这些开发人员通常从 C 过渡到 C++,语言之间的细微差异代表了他们学习曲线的重要部分。C++ 有结构,就像 C 一样,因为它们是不一样的。C++ 有类,它们与结构非常相似。本文解开这些语言元素的细节。
C中的结构
C 中的结构是自定义的复合数据项(对象),可以由现有的内置数据类型(int、char等)、位字段(指定位大小的整数)和其他结构构建。这个想法是聚合一些属于一起的数据项。例如,保存 3 维坐标的结构可能如下所示:
结构坐标 { 浮动 x; 浮动y; 浮动z; };
这段代码告诉编译器结构坐标是什么样的。然后,您可以继续声明这种类型的变量:
结构坐标位置;
变量位置是结构坐标类型,它的内部字段可以使用“点”运算符来寻址:
位置.x = 1.0; 位置.y = 2.0; 位置.z = 9.99;
当然,使用三个单独的浮点变量(名称如location_x等)可以实现类似的效果。但是,将位置作为可以传递给函数等的单个变量来处理要容易得多。
包含位字段的能力为结构提供了 C 中其他地方不具备的能力。下面是一个例子:
结构位寄存器 { 未注册:3; 未签名:3; 无符号极性:2; };
struct bitreg类型变量中的每个字段都有特定的位大小。编译器确保数据以合理的方式存储,因此我们希望这样的变量适合一个字节。此外,所有用于访问字节内字段的“bit bashing”代码都是自动生成的。因此,程序员可以简单地访问它们:
结构位寄存器控制; 控制.up = 1; control.down = 2; control.polarity = 3;
在大多数情况下,在 C 中使用结构非常简单,并且使代码更易于理解,而不会影响执行效率。但是,嵌入式开发人员应该注意两点:
尽管 C 结构看起来有点像一种新的数据类型,但实际上并非如此。一个数据类型通常会有一系列可以对其执行的操作;这不是 C 结构的情况。要对 C 结构做任何事情,除了创建指向它的指针之外,您需要访问内部字段。这个问题在 C++ 中得到解决。
C++ 中的类
C++ 语言具有许多面向对象的功能。其中之一是类的概念,它可以描述更像一种新数据类型的东西。可以从类中实例化一个变量(通常称为对象) ;即它是这种新类型的对象。
C++ 类具有与 C 结构几乎完全相同的语法和一些非常相似的功能。但是,有一些重要的区别:
此示例中说明了大多数这些功能:
我的班级 { 字符一个; 诠释 b; 上市: 无效的乐趣(); 我的课(); 〜我的类(); }; 我的类我的obj; myobj.fun();
成员变量a和b只能被三个成员函数fun()、myclass()和~myclass() 访问。后两个函数是构造函数和析构函数。只有fun()可能被用户代码调用。所有三个函数的实际代码将在别处定义,并使用::运算符与类相关联,因此:
无效 myclass::fun() { ...
C++ 中的结构
除了类之外,C++ 还具有向后兼容 C 的结构。但是,C++ 结构还具有与类相同的附加功能。这只是 C++ 中结构和类之间的一个区别。正如我们所见,类中成员变量和函数的默认可访问性是私有的;结构中的默认值是公共的。因此,早期类的功能也可以这样表示:
结构体 { 无效的乐趣(); 我的课(); 〜我的类(); 私人的: 字符一个; 诠释 b; };
在 C++ 中使用类和结构
获得此信息后,建议您不要过度利用它。当您需要额外功能时,仅将结构用于它们在 C 和类中提供的功能有很多原因。首先,这是代码可读性的问题。另一个开发人员可能对细节不是很清楚,以“非标准”方式编写的代码会令人困惑。
编写代码时的一个关键优先事项是确保它是可读的(=可维护的)。有人——可能是你——可能需要在一年后查看这段代码并了解它的作用。一些建议:假设将维护您的代码的人是一个武装的精神病患者,他的耐心有限,并且知道您的家庭住址。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !