2013-01-22 59 views
3

在互聯網上進行了半個小時的研究後,我找不到任何關於功能樣機優點的理由討論。功能樣機的優點

我使用Java/Android進行管理,並開始了C課程。與我之前的經驗相比,原型設計看起來很麻煩,我想知道它爲什麼在2013年仍然存在的原因。

據我所知,裏奇和好友的生活比較困難;然而,今天編寫的編譯器可能會在第一遍中生成一個函數列表,然後使用該函數列表執行其通常的操作,因爲當前的編譯器會使用頭文件。

它可能無法持續或者只是因爲向後兼容性。創建一個可以在當前操作模式和我剛纔描述的假設新模式之間切換的編譯器是可行的,具體取決於它所顯示的代碼。

如果原型設計仍然存在,它必須對編程人員有興趣,而不是編程人員。我是對還是錯 - 我能在哪裏找到關於功能原型與無原型設計的優點的合理討論?

+1

好吧,在c - 它是在需要的情況下完成的(在實際編程之前聲明main()的漂亮函數)。對於C之後的所有內容,我對這個話題的謙虛概念是:它的好風格。你看到你聲明/轉發聲明的東西。更不用說分析對於大型代碼庫的影響有多大才能解決那些未原型化的功能(更不用說其他地方提供的庫) – Najzero

+0

優點1:代碼不會崩潰。 – 2013-01-22 14:49:43

+0

我們曾經擁有獨立頭文件的人發現,你必須首先實現所有函數,因此編譯器可以提取他們的簽名非常麻煩。哦,你們這個Java界面的東西是什麼? –

回答

8

你忘記了在C中你可以調用一個函數,它的源代碼沒有

C支持代碼的二進制分發,這是(商業)庫非常常見的。

您將得到一個標頭,該標頭聲明API(所有函數和數據類型)以及.lib(或任何您的平臺使用的)文件中的代碼。 C的所有標準庫都是這種情況;您並不總是將源代碼提供給編譯器供應商的庫,但是您當然仍然可以調用這些函數。

爲了達到這個目的,C編譯器在處理代碼時必須有聲明,因此它可以爲調用生成適當的參數,當然還要正確處理任何返回值。

這是不夠的,僅僅依靠你的源,因爲如果你做

GRAPHICSAPI_SetColorRGB(1, 1, 1); 

但實際的聲明是:

void GRAPHICSAPI_SetColorRGB(double red, double green, double blue); 

編譯器不能奇蹟般地您int參數轉換爲double,如果它沒有原型。當然,使用原型可以錯誤檢查通話是否有意義,這非常有價值。

+0

是的,我只在個人項目上工作,我可以看到我不會注意到這一點。那麼如何分配java庫,因爲據我所知,java沒有頭文件?感謝迄今爲止有幫助的答案。 – pouzzler

+0

此外,函數的源代碼可能在彙編文件中可用,編譯器通常無法從函數中調用該函數。 –

+0

Java語言具有定義良好的[class file format](http://en.wikipedia.org/wiki/Java_class_file#File_layout_and_structure),其中包含有關類型和參數的信息。 C目標文件不。 – unwind

3

關於讓編譯器有一個有趣的想法,首先查看所有源文件,注意所有函數原型。

然而

  • 庫(目標代碼)需要有自己的聲明的地方,這就是爲什麼包括存在

此外,我覺得方便,可以grep包括作爲「自由文本」,就像

grep alloc /usr/includes/*