我一直在使用一個主要由程序員編寫的大型代碼庫,他們不再在公司工作。其中一名程序員顯然在他的心臟中有一個特別的地方很長長宏。我可以看到使用宏的唯一好處是能夠編寫不需要在所有參數中傳遞的函數(在我閱讀的最佳實踐指南中建議不要這樣做)。除此之外,我認爲沒有內聯函數的好處。大C宏。有什麼好處?
一些宏如此複雜我也很難想象有人甚至寫他們。我試圖以這種精神創造一個,這是一場噩夢。調試非常困難,因爲它在調試器中將N +行代碼放入1中(例如,在這個大塊代碼中存在段錯誤,祝你好運!)。我不得不把宏拉出來,並運行它宏觀大小來調試它。我可以看到寫這些的人的唯一方法是在調試完成後用代碼編寫的代碼自動生成它們(或者比我更聰明,第一次寫得完美,我猜這總是可能的) 。
我錯過了什麼嗎?我瘋了嗎?有沒有我不知道的調試技巧?請填寫我的意見。我真的很想聽聽觀衆中的宏觀愛好者。 :)利益的
由於這些原因,我可以理解一些簡短的宏,但是將理智驗證函數聲明爲宏還是內聯函數會有什麼好處嗎?我在工作中遇到了一些X_VALIDATE宏內的大量失敗,但它們包含多個斷言語句和循環。核心文件不會告訴我哪個斷言失敗(從而使調試更加困難)。在我看來,這可能是一種內聯函數,沒有成本和很多好處。你會同意嗎? – jdizzle 2009-07-13 20:18:38
在宏(而不是內聯)中斷言的主要好處是__FILE__和__LINE__將是正確的。既然你有一個核心,你可以得到整個堆棧,所以對你來說沒什麼大不了的。如果它可以在沒有宏的情況下編寫,請在沒有宏的情況下執行。如果它只能通過一個宏來完成,那麼你就可以得到好處。對我來說,好處需要簡單得多的代碼或更少的錯誤代碼。 – 2009-07-13 20:35:52
__FILE__和__LINE__應該是`__FILE__`和`__LINE__`上面(不知道我需要轉義) – 2009-07-13 20:37:23