2009-08-02 58 views
6

我成爲面向對象代碼時代的專業程序員,並擁有多年的C++編程經驗。我經常從事大型項目,這些項目有多年的遺留代碼,混合使用C++和c。 我對純粹的c系統部分的工作感覺不太舒服。從C++編程開始,我理解了所有的C語法,但是關於如何在沒有對象的情況下組織一個複雜的C程序還有一個漏洞,以及如何管理我想填充的內存的最佳實踐。我在學習java程序員之後學習了C++,並且認爲更多的c會讓我成爲更好的C++程序員,並且少了一點java被翻譯成C++程序員是否有任何教程幫助精通C++程序員學習c?

+0

有史以來的教程,我發現似乎認爲你是一個C程序員移動到C + +。當然,我不能成爲唯一希望更好地理解c的面向對象的程序員。 – 2009-08-03 00:09:29

+0

我想如果你寫幾個中型的C程序,將教你如何避免麻煩。實際上,以任何語言惹麻煩都是一種寶貴的學習方式。像觸摸熱的東西。 – Nosredna 2009-08-03 00:10:45

+0

在這種情況下,StackOverflow已經存在幾個問題(和一些C#移動到C問題)。從我的本地c演講者大多在C++有利位置的功能,我雖然看到了幾件看起來不錯的建議。他們可能值得追捕。 – dmckee 2009-08-03 00:29:40

回答

1

在組織方面,望着POSIX APIs,尤其是pthreads會給你如何組織的C代碼是個好主意。良好的C項目組織的基本規則是:

  • 不要暴露你的結構。僅使用不透明類型。
  • 使用庫和數據類型名稱作爲函數名稱的前綴。
  • 爲分配/構建和銷燬/釋放提供「創建」和「銷燬」功能。
  • 將不透明類型作爲第一個參數傳遞給在該類型上運行的函數。
  • 使用C或C++實現C API(這取決於您)。顯然,在那裏使用不透明的類型。
0

調查大量使用指針的程序因爲無論如何,低級結構在我看來是一個好的開始。它也取決於爲什麼構建的程序。您是否試圖在嵌入式rtos板或微控制器系統上編寫C代碼?

1

我和你基本上在同一條船上(雖然經驗不足,而且我從Python開始而不是Java開始),最適合我的是坐下來閱讀Kernighan和Ritchie。由於您熟悉語法,因此您可以瀏覽本書的前半部分,但您一定會對低級內存管理有更好的理解。

閱讀Linux內核源代碼中與內存管理有關的部分也有幫助,但不是因爲內心的疲憊或輕鬆無聊。

1

擴展在another answer,一種方法是隻寫C.這是大多數庫我的行爲交互的方式(例如,GNOME堆幾乎完全面向對象的C,主要是基於GObject的面向對象的庫使它更容易)。你可以把它看作C++而不用一些語法糖。

你最終像


/* in project NewStuff; namespace is ns */ 
ns_foo_t *ns_foo_new(); 
void ns_foo_delete (ns_foo_t *); 

int ns_foo_make_waffles (ns_foo_t *this, int no_of_guests); 

int main() { 
    ns_foo_t *my_foo = ns_foo_new(); 
    ns_foo_make_waffles (my_foo, 1); 
    ns_foo_delete (my_foo); 
} 

的API相當於幾乎完全以


class Foo { 
    public: 
    Foo() { /* whatever */ } 

    int make_waffles (int no_of_guests) {} 
}; 

int main() { 
    Foo *my_foo = new Foo(); 
    my_foo->make_waffles (1); 
    delete my_foo; 
}