从Java过渡到C代码组织

时间:2013-12-15 14:02:20

标签: java c code-organization modularity

使用Java编程时,我显然会在类中保留相关代码,组织类结构,层次结构等以最大化代码重用。

现在我开始使用C,并且对于以模块化方式组织C代码的最佳方式感到有点困惑。显然我知道头文件和源文件,但在C语言中最大化代码重用时有点不知所措。

那么,人们如何用C语言组织他们的代码,这显然不支持OOP。

2 个答案:

答案 0 :(得分:0)

两种语言的不同之处在于java更现代,专为OOP设计

C比较老,而且是并且是一种语言。由于语言不同,我们编程的方式通常不同,布局也是如此。

C程序在.h中有标题(和函数原型),在.c文件中有函数代码。

就模块性而言,您仍然可以按照分区代码的方式对Java进行类似的处理。一般的经验法则是一个文件应该做一件事,即string_parser.c应该只处理字符串解析。 list_sorter.c应该处理列表排序等。

在代码重用方面 - 像“实用程序”文件这样的东西是好的,因此可重用的有用代码可以放在一个C文件中并包含在需要的地方。您永远不必在C中复制代码,因此如果您发现自己复制/粘贴函数,请将其放在中心文件中并将其包含在多个位置。

编写通用函数!让你的功能变得简单和开放,因此它们不那么具体,这样你就可以重复使用你的功能。

我的建议是牢记您的Java代码布局知识,还要检查一个好的C指南。 http://www.doc.ic.ac.uk/lab/cplus/cstyle.html

通常,良好的项目设计将帮助您计算项目的文件布局/结构。

答案 1 :(得分:0)

我倾向于这样想:

  • java类的C等价物应该在一对.c / .h文件中。它的数据(私有或公共)包含在结构中(最好只在.c文件中声明)。在.h文件中声明的每个函数都有一个指向其结构的指针作为参数。 .h文件只需要包含结构的声明。
  • 除了将文件定位在不同的目录中之外,任何东西都无法实现java包的C等价。但是,由于单个全局命名空间,仍然必须为每个非静态函数添加前缀并键入唯一的内容,例如XXXNAME_YYYNAME_ZZZNAME_FunctionName(),其中XXXNAME是公司的名称,YYYNAME是产品或库的名称,ZZZNAME是产品/库中子包的名称。我注意到它在现实生活中并不常见,根本不使用公司名称,如果产品/库是“小”,那么也不会使用。
  • 通过将“baseclass”的结构作为“子类”结构的第一个元素,可以很容易地实现
  • (单个)继承。但是,在不暴露整个结构的情况下,继承结构不容易暴露给客户端。

示例头文件:

struct CARLIB_Car_s;

void CARLIB_Car_Drive(struct CARLIB_Car_s *pCar, uint16_t KiloMeters);

示例源文件:

struct CARLIB_Car_s {
   uint16_t FuelLeft;
};

void CARLIB_Car_Drive(struct CARLIB_Car_s *pCar)
{
  // ...
}