结构化C应用程序?

结构化C应用程序?,c,architecture,C,Architecture,我计划用C语言开发一个应用程序。我的编程经验一直是使用面向对象语言。因此,在设计应用程序时,我总是考虑类、接口、继承、多态性等 我看过的所有C语言书籍都是关于如何用C语言编程的,或者专注于一个特定的主题,我找不到任何关于C语言应用程序体系结构的书籍。那么,当OOP功能不可用时,如何构造C应用程序呢?您如何使所有内容都模块化、井然有序,并避免代码重复(没有OOP,似乎会有大量代码重复) 编辑: 我不是在寻找关于“如何用C编写OOP代码”的答案。我正在寻找构造C应用程序的标准实践方法,使其模块化且组

我计划用C语言开发一个应用程序。我的编程经验一直是使用面向对象语言。因此,在设计应用程序时,我总是考虑类、接口、继承、多态性等

我看过的所有C语言书籍都是关于如何用C语言编程的,或者专注于一个特定的主题,我找不到任何关于C语言应用程序体系结构的书籍。那么,当OOP功能不可用时,如何构造C应用程序呢?您如何使所有内容都模块化、井然有序,并避免代码重复(没有OOP,似乎会有大量代码重复)

编辑:
我不是在寻找关于“如何用C编写OOP代码”的答案。我正在寻找构造C应用程序的标准实践方法,使其模块化且组织良好。如果标准的实践方法是破解一些OOP特性,那么这就足够了,但如果不是这样,那么就没有必要告诉我沿着这条路线走下去。

您可以将C项目设计为面向对象项目,然后用结构替换类。这是在本书和本书中向我推荐的,为了创建可重用的C软件,请阅读David R.Hanson的这本书


基本OOP最好使用Alex Schriner的书中提到的技术,这是一种不同的思维方式。C的核心理念可以概括为:

data + algorithms = programs
因此,要用C语言设计应用程序:

  • 您需要仔细考虑数据是什么,并定义能很好地反映这一点的
    struct
    s,并促进数据上不同视图之间的关系

  • 你需要考虑什么算法将对什么数据进行操作,以及它们产生什么数据。这有助于澄清您应该拥有的
    结构
    s,并有助于显示应该将哪些块组合在一起以创建可重用的代码块

  • 从OOP方法转向这种方法的一种方法是,想象一个
    struct
    +One.c file=class,并将结构定义和外部可访问函数(公共方法)放入.h文件中

  • 你必须写很多代码来做一些无聊的事情,比如内存分配和释放等等。这并不像听起来那么糟糕,但要将其考虑到你的设计中


  • 首先,您将确定解决问题的组件及其交互。 然后在每个组件中,可以使用以下实践

  • 首先设计公共功能
  • 设计函数将要工作的数据结构(即struct)
  • 修改公共函数,将相应的结构作为指针参数。[c中没有实例变量概念。您需要定义一个结构并在函数之间传递结构]
  • 将具有头文件中相关数据结构的函数分组
  • 在一个单独的c文件中提供公共函数的实现,该文件包括您定义的头文件
  • 将所有private/helper方法设置为静态,这样其他c文件就看不到它们
  • 由于C中没有名称空间概念,请确保公共函数不会与现有库函数冲突。有些人正在使用名称混乱,比如{头文件的短名称}{函数名}
  • 分配和释放内存是开发人员的责任。最好有初始化和释放函数来分配和清除内存以及设计的公共函数
  • 遵循您熟悉的编码样式
  • 将每个组件设计为共享库,这样您就不必每次都编译它们

  • 可以使用C练习TDD,请参阅


    如果您习惯于练习TDD,您知道它将帮助您保持代码的良好组织和模块化

    在美国华盛顿州雷德蒙(Redmond,WA,98052)没有微软的
    1方法。但这有什么关系呢?@AlexeyFrunze嗯,我的意思是没有任何特定标准中定义的构造C程序的“标准实践”。这是我发明的一个比喻:-这是编写C应用程序的标准实践吗?我不想执行一些黑客行为,这样我就可以“在某种程度上使用C语言中的对象”。我想以标准的最佳实践风格开发C应用程序。你推荐的是用C语言做事情的标准方法吗?@csss虽然在用C语言编程时没有标准的推荐程序,但这门艺术是随着时间的推移而发展的。我提到的《C接口和实现》一书教你如何做到这一点。上面的链接甚至这个链接提出了一种设计C应用程序的方法,这种方法接近于面向对象的项目设计——这不是一种黑客行为。否则,你可以使用C++来代替这个页面上的第一个答案:用C做OOP是“乏味的,不是完全可取的”——如果它是“不明智的”,我就不认为它是最佳实践。CSS如果你想做C++已经做的(过去也是),那就是C++中的面向对象编程,那么它是错误的。但是,您可以像基于对象的编程语言一样编程C,并解决许多问题。代码复制从来都不是问题——为什么会是这样?所有好的C程序都是用函数编程的,一个函数一个任务。2函数2作业..没有读过这本书,但已经看过了示例。一般来说,它看起来不错,但我认为使用defines替换type有点可疑。