為什麼大部分編程語言棄用了宏?

吳昆明123------


這個世界上絕大部分編程教材是針對剛入門的程序員寫的,沒錯,很多編程二十年的程序員其實也剛入門。

以前帶隊時我總是提醒新招的C/C++程序員盡最大可能不要使用macro,我會警告他們macro有一千種可能令他們的代碼出錯並且查不出來,之所以有一千種是因為我不想再數下去了。然後他們打開我的代碼以後就抓狂了。

如果你問一個程序員什麼樣的代碼bug最多,會有很多回答,比如coding style,複雜度,blablabla…

都對,因為他們都是初級程序員。

但是,對於一個資深高級程序員,一個架構師,一個真正的高手來說,其實真正的殺手是代碼長度。越短bug越少,不管它多複雜,越長bug越多,不管它多簡單。

human error,that simple!

除了極極極少處不得不使用macro的場景,我使用macro都是為了縮短代碼。

可讀性?這個真的非常非常非常重要!是的,對於高手來說,“短”就意味著可讀性不會太糟,邏輯複雜性並不是問題。如果你讀不懂一段“短而tricky的”代碼,說明你不是高手。

當然,你可以質疑哪裡有那麼多高手?沒錯,但我為什麼要讓那些低手看明白我的代碼?讓他們自以為看明白以後去糟蹋嗎?

如果是一個真正的高手接手了我的代碼,並把我狗血淋頭的大罵一頓,沒問題啊,他批評的一切我都認同,我誠懇認錯,反正你已經看懂了。

但我還是會反覆警告新手,盡一切可能避免macro!如果聽者是個高手,他本來就不必理會我的blablabla。

以前我帶的組裡有一個高手,代碼能力比我高多了,好多macro的技巧我還是跟他學的,但他極少用,我完全贊成他的理念。

如果說最壞的編程習慣,其實是copy paste,可惜這才是大多數程序員最常見的毛病(儘管幾乎人人都清楚)。我在這一點上非常極端,一行C/P都不可以,我見過太多太多摔在這裡的案例,每一行C/P(或相似體)我都會堅決去掉,能抽象成函數的,做成函數,出於性能考慮的,用inline,去相似性,能用template也行,如果上下文太多沒法函數化,最後一個選擇就是macro。

macro是一匹桀驁不馴的烈(劣)馬,但是對一個好騎手來說,只需要馴服一次。


帖木兒


宏這種東西,在C語言上一經問世、就走向讓人看不懂的宏才牛逼的炫技道路,首先你必須明白:宏不是函數,不佔內存,不參與編譯,視圖用宏代替函數的做法本身就是有危險的做法。

在面向對象的編程中,萬一有人視圖用宏編寫一個類成員函數呢?而且要在內存中實例化,……,所以JAVA說:宏你去死吧!


素食的貓


很多語言和很多公司排斥宏並不是技術原因,而且是向現實的妥協!

因為現實的情況是【行業中有太多沒有技能,沒有責任心的程序員】!

宏是一個好工具,但它不是平庸的程序員能駕馭的。。。但是,唉,我也實在有點感到悲哀,這麼多小朋友居然連宏都hold不住該怎麼寫程序?!


特修斯的宇宙


一個宏套宏,把人可以搞暈。

宏其實就是一種文本替換,純C用它實現類似函數和模板的功能。

C++的模板也有點類似文本替換。

這兩種東西可讀性都不咋的。


三袋大菠蘿


不安全。

宏的作用就是替換,或者說助記,一般會給一些常用的方法定義成宏,使用的時候直接用語言寫出來就好了。宏的實現也非常簡單,文本替換而已。

但是缺點很明顯,宏是不安全的,沒有任何的檢查,即使出現問題也不會第一時間知道,定位錯誤也會有困難,特別是引入複雜的宏函數以後。

現在很多高級語言變成了解釋型語言,甚至使用動態數據類型,那麼對於宏來說,失去了類型檢查,其危險性就更高了。


榻榻米的榻榻


因為大部分程序員hold不住宏


自行輪迴


(1)文本替換容易出錯,(2)調試起來不方便。


不知名數碼


因為編程語言越來越傻瓜化了。


莫名其妙4956


為什麼大部分編程語言棄用了宏?


灬亦凡


你總麼看


分享到:


相關文章: