当前位置:  开发笔记 > 编程语言 > 正文

C的代码组织风格?

如何解决《C的代码组织风格?》经验,为你挑选了2个好方法。

我知道一些更高级的语言,所有基于Web(PHP,javascript,一些python).我终于决定学习一门低级语言了,我决定和C一起去.问题是我使用的所有语言都是基于OOP.看作(基于我所做的研究)C没有类或继承.因此,我问你:我应该如何以有组织的方式在O中组织我的代码,而不必切换语言或只是拥有无穷无尽的函数文件?

从未来编辑:这个问题非常愚蠢地回顾它.我15岁,在我的学校没有CS ......



1> David Thornl..:

C在代码组织方面没有提供太多帮助.有功能和文件.

无论何时想要实现具有隐藏实现的接口,或者可能使用私有函数,都要创建两个文件,如"foo.h"和"foo.c".

接口和/或公共函数是"foo.h"中的函数原型,函数用"foo.c"编写.此外,任何隐藏的实现或其他私有函数都在"foo.c"中,但标记为static,例如static int foo_internal_function(int i);.标记的功能static只能在它们存在的文件中引用,而不能在其他任何文件中引用.

没有正式的命名空间,尽管你可以通过添加函数名称来获得相同的效果,例如Foo_discombobulate_developers().没有类,尽管你至少可以通过文件获得一些封装效果.没有可扩展的层次结构,只有文件和功能.

C在后面的语言组织附近没有任何地方,但是已经写了许多非常好的程序.小心,评论任何令人困惑的事情(在C中可能会有令人困惑的事情),并保持良好的记录.


+1用于理解公共和私有API的正确方式.使用`static`隐藏所有未导出的函数.为模块创建自己的命名空间(所有导出符号的公共前缀)是您应该*做的事情.

2> Doug T...:

"具有无穷无尽功能的文件"

你真正想要的是具有明确定义和有限功能集的文件.这称为模块化编程.您的想法是将基于功能的函数分组到单个编译单元中,并在标头中定义函数原型:

foo.h中:

int GetFoo();

foo.c的:

int GetFoo()
{
   ...
}

它有点类似于将一组方法分组到单个类中的方式.主要区别在于,您可能在任何特定时间都可以使用"这个"东西.也就是说,您仍然可以在C中进行基本上"面向对象"的编程.但是,您的对象将成为模块的参数.这是一种方法:

Bar.h:

typedef int BAR_OBJ

BAR_OBJ MakeBar();

int GetBarSize(BAR_OBJ);

void DoFooToBar(BAR_OBJ, ...)

Bar.c

   struct BarDetails
   {
      int isFree;
      int size;
      ...
      // other info about bar
   };

   static BarDetails arrayOfBars[...]; // 

   BAR_OBJ MakeBar()
   {
       // search BarDetails array, find free Bar    
   }

   int GetBarSize(BAR_OBJ obj)
   {
       return arrayOfBars[obj];
   }

   void DoFooToBar(BAR_OBJ, ...)
   {
      // lookup bar obj and do something
   }


另外,“ BAR_OBJ MakeBar();” 应该可能是“ BAR_OBJ MakeBar(void);”。在C ++中没有什么区别,但是在C语言中,第一种意味着您未提供有关声明中参数的信息,第二种意味着该函数不接受任何参数。
推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有