我只有初学者级别的C技能,并想知道是否有任何事实上的"标准"来构建C中有点复杂的应用程序.甚至基于GUI的应用程序.
我一直在Java和PHP中使用OO范例,现在我想学习C我害怕我可能以错误的方式构建我的应用程序.我无法遵循哪些指导方针,使用程序语言实现模块化,解耦和干燥.
你有任何建议吗?我找不到C的任何应用程序框架,即使我不使用框架,我总是通过浏览他们的代码找到好的想法.
首先我要说的是,我在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文件中完成所有编码.但是,我正在开展一个足够大的项目,这样做变得不切实际.我一直在#including他们,但是我遇到了多次#include一些文件的情况,等等.我听说过.h文件,但我不确定他们的功能是什么(或者为什么有2个文件比1)好.
我应该使用什么策略来组织我的代码?是否可以将"公共"功能与特定文件的"私有"功能分开?
这个问题促成了我的询问.tea.h文件没有引用tea.c文件.编译器是否"知道"每个.h文件都有一个相应的.c文件?
我正在开始一个新的C项目,主要是基于OSS的.它也将在SourceForge上,我想借此机会学习组织此类代码的既定最佳实践.我正在使用像libcurl和libz这样的库,我将使用MinGW和MSYS编译它.
我将使用我的projet分发我正在使用的所有库的源代码,因此下载源代码的人不必去寻找依赖项.我该怎么称呼我存储库的目录?到目前为止,我在以下方面犹豫不决:
我应该在哪里编译这些库?我应该简单地将它们配置并安装到系统根目录,还是应该设置一个所有库应该编译到的目录,并从那里进行链接?显然,这会对我的Makefile产生影响.
我该怎么办呢?我应该遵循既定的惯例吗?他们写在某个地方吗?
我只需要在C中编码几次,而且每次我都这样做,它就变成了一些无法管理的野兽.
我已经在C#和.Net中完成了大部分的编程,因此我非常习惯于类风格的体系结构,但我似乎无法掌握C语言应用程序中的组织.我应该把函数定义放在一个文件中,将函数定义放在一个文件中,然后在另一个文件中处理,等等.这个主题有没有什么好的资源?
另请参阅:从面向对象的土地中挣扎?