在課堂上,教授說他喜歡C比Java更好的一個原因是C有一個預處理器,特別是宏。宏聲明final
/const
變量與期望的值有什麼好處?我知道Java沒有全局變量,所以會有這樣一種情況:使用一個變量替代宏是行不通的。爲什麼Java沒有宏?
回答
沒有理由不能通過宏預處理器運行Java代碼;這只是沒有做的語言的一部分。
說了這麼多,宏在C語言中很有價值的原因大部分都是C語言的問題,大多數人使用它們是非常醜陋和適得其反的,雖然它們也有很多好用處。
無論如何,我真的會質疑某人在比較C和Java的基礎上有人擁有宏而另一個人沒有宏的專業知識。在大事件中,這似乎是語言之間最微不足道的差異之一。突出表明這個人不瞭解語言之間的真正差異;也許他喜歡C但不知道如何命名C對Java的任何實際特性 - 例如存儲持續時間和類型表示。
+1對老師的評論......我的完全猜測是,這就像是一位EE教授,他在不瞭解太多節目的情況下做出了袖手旁觀的評論。 –
在C中使用宏系統一直是一個長期存在的傳統,通常會導致難以理解的構建鏈和項目特定的構建配置。我認爲在C中存在宏的原因是爲了克服它作爲一種語言的缺點,當你需要宏提供的東西時(例如,你可以使用Java中的接口,它解決了需要創建一個「通用「的東西)。
儘管如此,有時候宏觀系統似乎更容易適應問題。我知道有些商店會這樣做 - 例如 - 當他們需要支持多種不同版本的API時。通常,您可以通過在設計中正確使用接口和良好的抽象層來克服Java中的這個問題。但是,那裏有are macro systems for Java!如果你願意,你可以使用它們。你也可以注意到,就宏而言,C宏並不是什麼特別的東西。
(在我看來你的老師是有點不對頭...)
宏在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,以儘可能地讓自己拍攝。
- 1. Excel宏沒有做什麼?
- 2. 有沒有什麼竅門禁止C宏被稱爲左值?
- 3. 爲什麼Java 8沒有「myArray.stream()」函數?
- 4. Java爲什麼沒有ceil(float)?
- 5. 爲什麼java中沒有頭文件?
- 6. 爲什麼沒有在Java中
- 7. int爲什麼沒有改變? java的
- 8. 爲什麼LinkedList在java中沒有initialCapacity?
- 9. 爲什麼在java中沒有sizeof
- 10. 爲什麼Java中沒有靜態類
- 11. 爲什麼Java沒有文件拷貝?
- 12. 爲什麼Java中沒有「Equlable」接口?
- 13. Rust爲什麼沒有在多語句宏中找到變量?
- 14. 爲什麼stdarg.h有一個宏«__va_size»?
- 15. 爲什麼Java中沒有內存區域沒有gc發生?
- 16. 爲什麼Me.components什麼都沒有?
- 17. 爲什麼我的課沒有什麼?
- 18. 爲什麼gridview.selectedColumns什麼都沒有?
- 19. 爲什麼Java在Java中沒有指針時會出現「NullPointerException」?
- 20. 爲什麼沒有java.lang.UnsupportedClassVersionError?
- 21. 爲什麼沒有asyncContext.cancel()
- 22. 爲什麼沒有uniform_distribution?
- 23. 爲什麼沒有SortedList
- 24. 爲什麼沒有UTF-24?
- 25. 爲什麼UDP沒有「accept()」?
- 26. 爲什麼沒有InterlockedExchangeSubtract64?
- 27. 爲什麼current_user沒有?
- 28. 爲什麼沒有ConfigurationManager?
- 29. 爲什麼沒有Dictionary.TrimExcess()?
- 30. 爲什麼沒有dscanf()?
我喜歡Java比C更好的一個原因是不需要預處理。 –
@Celeritas:通過詢問Java中的宏,你已經在推動它,但是詢問爲什麼Java會得到一個糟糕的說唱(一個非SO非常面向的問題,其重點是與實現相關的問題..)可能並不合適並且最好留給程序員stackexchange。 –
恕我直言,Java的大受歡迎程度是,你可以相對容易地理解它的大部分功能和大部分問題,因爲它比其他流行語言具有更少的功能。這使得閱讀和理解別人的代碼更容易。雖然仍然有很多方法可以用Java編寫糟糕的代碼,但當你有很多方法來做同樣的事情時,情況會變得更糟。對於體驗開發者來說,這種缺乏選擇可能令人沮喪,但是如果你不得不與經驗較少的開發者一起工作,我仍然希望減少自己的腳步。 ;) –