2012-09-27 104 views
1

在課堂上,教授說他喜歡C比Java更好的一個原因是C有一個預處理器,特別是宏。宏聲明final/const變量與期望的值有什麼好處?我知道Java沒有全局變量,所以會有這樣一種情況:使用一個變量替代宏是行不通的。爲什麼Java沒有宏?

+8

我喜歡Java比C更好的一個原因是不需要預處理。 –

+0

@Celeritas:通過詢問Java中的宏,你已經在推動它,但是詢問爲什麼Java會得到一個糟糕的說唱(一個非SO非常面向的問題,其重點是與實現相關的問題..)可能並不合適並且最好留給程序員stackexchange。 –

+1

恕我直言,Java的大受歡迎程度是,你可以相對容易地理解它的大部分功能和大部分問題,因爲它比其他流行語言具有更少的功能。這使得閱讀和理解別人的代碼更容易。雖然仍然有很多方法可以用Java編寫糟糕的代碼,但當你有很多方法來做同樣的事情時,情況會變得更糟。對於體驗開發者來說,這種缺乏選擇可能令人沮喪,但是如果你不得不與經驗較少的開發者一起工作,我仍然希望減少自己的腳步。 ;) –

回答

3

沒有理由不能通過宏預處理器運行Java代碼;這只是沒有做的語言的一部分。

說了這麼多,宏在C語言中很有價值的原因大部分都是C語言的問題,大多數人使用它們是非常醜陋和適得其反的,雖然它們也有很多好用處。

無論如何,我真的會質疑某人在比較C和Java的基礎上有人擁有宏而另一個人沒有宏的專業知識。在大事件中,這似乎是語言之間最微不足道的差異之一。突出表明這個人不瞭解語言之間的真正差異;也許他喜歡C但不知道如何命名C對Java的任何實際特性 - 例如存儲持續時間和類型表示。

+0

+1對老師的評論......我的完全猜測是,這就像是一位EE教授,他在不瞭解太多節目的情況下做出了袖手旁觀的評論。 –

5

在C中使用宏系統一直是一個長期存在的傳統,通常會導致難以理解的構建鏈和項目特定的構建配置。我認爲在C中存在宏的原因是爲了克服它作爲一種語言的缺點,當你需要宏提供的東西時(例如,你可以使用Java中的接口,它解決了需要創建一個「通用「的東西)。

儘管如此,有時候宏觀系統似乎更容易適應問題。我知道有些商店會這樣做 - 例如 - 當他們需要支持多種不同版本的API時。通常,您可以通過在設計中正確使用接口和良好的抽象層來克服Java中的這個問題。但是,那裏有are macro systems for Java!如果你願意,你可以使用它們。你也可以注意到,就宏而言,C宏並不是什麼特別的東西。

(在我看來你的老師是有點不對頭...)

+2

你的「答案」比其他任何東西都更令人困惑...... – Asblarf

+2

@Asblarf如此無情。你沒有提供任何理由說明爲什麼我的回答不好,但如果你認爲我真的搞砸了,繼續前進,我不會冒個人責任,但我建議你解釋你爲什麼這麼想,而不僅僅是給予一個相當侮辱的敲門... –

+0

@Kristopher_Micinski對不起。我不是故意要侮辱。我的觀點是,你的回答不僅僅是一個實際答案(即一整套論據/例子)的評論。我很抱歉。 – Asblarf

3

宏在C不是隻是全局常量。他們還可以定義功能,如

#define SHOW_DEFINE(x) printf("%s=%s\n", #x, STR(x)) 

這在調試過程中非常有用。用宏來傷害自己也很不容易。

#define MULTIPLY(X,Y) X*Y 

工作正常,可以說MULTIPLY(1,2),但導致的問題,如果一個使用乘法(1-1,2-2)= 1-2 * 2-2 = 1-4-2而不是預期的0 * 0。

通常,使用現代工具,這些功能不再是必需的,並且具有良好的設計和一些抽象以及Java提供的接口通常不需要在Java中具有宏。 Java被設計爲afaik,以儘可能地讓自己拍攝。