有没有人有关于如何以最佳方式构建C代码项目的技巧/资源? (不同的文件夹等)你怎么知道什么时候把代码分成单独的文件是好的?什么是一个好的Makefile的例子?构建C代码的技巧/资源?
我的项目是不那么大,但是我想开始在早期阶段构建我的代码..
有没有人有关于如何以最佳方式构建C代码项目的技巧/资源? (不同的文件夹等)你怎么知道什么时候把代码分成单独的文件是好的?什么是一个好的Makefile的例子?构建C代码的技巧/资源?
我的项目是不那么大,但是我想开始在早期阶段构建我的代码..
阅读的互联网上提供的许多C编码标准之一,并按照一个看起来合理的满足您的要求。几个环节:
下列书籍中也含有编写好的C代码有效的指导方针:
构建代码需要一定的经验,但大多是常识。
对于拆分代码,通常要求可读性:概念上相关的函数/数据类型应该放在同一个文件中。您可以将c标准库作为一个好例子。最好将数据结构定义和函数声明保存在不同的头文件中。这允许您将数据结构作为编译单元的一部分使用,即使您尚未定义所有功能。
提供类似功能的文件应该放在同一个目录中。避免深层目录结构(最好是1层深度)是很好的,因为这会使项目不必要地复杂化。
我认为Makefiles可以用于小型项目,但对于较大的项目会变得笨重。对于认认真真的工作(如果你想发布您的代码,创建一个安装等),你可能想看看CMake的,使用SCons等
看一看在GNU编码标准:http://www.gnu.org/prep/standards/standards.html
看gnu make一个简单的例子Makefile的手册。你也可以选择任何开源项目并查看Makefile。在sourceforge.net中浏览代码库可能会有用。
如果你要谈论GNU标准,你应该提及'automake'。它节省了很多时间来制作符合标准的'Makefile's,并且它比CMake更好(当然,虽然不那么漂亮,但肯定更好)。 – 2010-11-16 20:34:10
这是有争议的,看起来社区正在逐渐远离automake。我毫不怀疑gnu autotools对于许多项目多年来都非常有用,但是有更新的工具从中获得了经验: – subhacom 2010-11-17 06:44:19
这里有一些链接:http://lwn.net/Articles/188693/和http ://www.scons.org/wiki/SconsVsOtherBuildTools和http://ubuntu-ky.ubuntuforums.org/showthread.php?t=976922 – subhacom 2010-11-17 06:51:17
这有时会被忽视,但安全性是大项目中的一个问题。这里有一些关于如何program securely的建议。
下面是一个成语我喜欢:
申报struct
S IN的报头,使得它们的大小是由客户机代码已知的。然后将init和deinit函数声明为以下约定:
struct foo*
。struct foo*
。int*
(最简单),enum foo_error*
(如果有多种方式可能会失败,调用代码可能会关心)或GError**
(如果您正在编写GLib样式的代码)。foo_init()
和foo_deinit()
回报NULL
如果第一个参数是NULL
。他们还返回第一个参数。
为什么这样呢?调用代码不必为结构分配堆空间,它可以放在堆栈上。如果您在堆中分配的,虽然,以下工作得很好:
struct foo* a_foo = foo_init(malloc(sizeof(*a_foo)));
if (a_foo == NULL) {
/* Ruh-oh, allocation failure... */
}
free(foo_deinit(a_foo));
一切都工作得很好,即使a_foo == NULL
当foo_deinit
被调用。
+1表示编程的实践。 – 2010-11-16 11:06:12