首先我要说的是,我在C和C++方面都有相当多的经验.但是,我正在用C开始一个新项目,我一直在使用面向对象的语言这么长时间(C#和C++),我无法想出一种有效的方法来将功能封装在一个过程语言中.我的第一个想法是简单地依靠我的OO知识并构造它:
struct Foo
{
int x;
char *y;
};
struct Foo *new_Foo()
{
return (struct Foo *)malloc(sizeof(struct Foo));
}
void Foo_member_function(struct Foo *foo, int z)
{
foo->x = z;
}
Run Code Online (Sandbox Code Playgroud)
但这似乎很乏味,与C的精神相反.更不用说它是一个穷人的OO.
这个程序最终会变得相当大,所以从一个好的设计组织开始是至关重要的.我想,随着C语言的多年发展,某些设计模式已经发展到如何最好地构建代码以实现可维护性.与函数式编程非常相似,我希望过程式编程具有干净且可读性的范例.
指向相关文章和书籍的指针也是可以接受的.
当我遇到编程问题时,我自然会开始将它们分解为我脑子里的逻辑对象.谁有责任,谁拥有什么,谁来自什么,等等.
我正在与C斗争.我只是不知道如何用程序语言做事.
有经验的C程序员可以帮助解释我在设计时如何考虑我的程序吗?
例如,我想编写自己的Semaphore类.我自然需要一个队列的数据结构,我也想自己编写.如果我需要在Java或C#中执行此操作,我可以简单地编写一个快速的Queue类,并在我的Semaphore类中创建它的新实例.
但在C中,没有对象.那么我是否必须内联我的Queue数据结构的所有行为?
有人可以帮我"搞定"吗?
您能否推荐我应该阅读/学习什么才能在C中制作组织良好的代码?
我想要学习的一件事是在.h和.c文件中拆分项目的原则,在哪里和为什么,变量命名,何时使用全局变量...
我对处理这个特定问题的书籍和文章很感兴趣.
学习了Java和C++后,我学会了OO方式.我想开始一个相当雄心勃勃的项目,但我想用C语言做.我知道如何将问题分解为类以及如何将它们转换为类层次结构.我知道如何将功能抽象为抽象类和接口.我甚至有点精通以有效的方式使用多态.
问题在于,当我遇到问题时,我只知道如何做到这一点是以面向对象的方式.我变得过于依赖面向对象的设计理念和方法.
我想学习如何以严格的程序方式思考.如何在缺少类,接口,多态,函数重载,构造函数等的世界中做事情.
如何仅使用非面向对象的structs 表示复杂概念?你如何避免缺乏函数重载?以程序方式思考的一些提示和技巧是什么?
我只需要在C中编码几次,而且每次我都这样做,它就变成了一些无法管理的野兽.
我已经在C#和.Net中完成了大部分的编程,因此我非常习惯于类风格的体系结构,但我似乎无法掌握C语言应用程序中的组织.我应该把函数定义放在一个文件中,将函数定义放在一个文件中,然后在另一个文件中处理,等等.这个主题有没有什么好的资源?
另请参阅:从面向对象的土地中挣扎?