有沒有人有關於如何以最佳方式構建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