公尺哈遊三面的乙個問題,問的很深,從巨集定義是什麼,幹什麼用,優缺點,到別的語言為什麼沒有,層層深入,很好的問題。結果我也很好的掛掉了。所以來討論一下上述幾個問題正確的答案到底是什麼。
1.首先什麼是巨集定義,在c++中只有#define算是巨集定義,其餘的#操作都叫預處理,所以巨集定義就是#define,#define就是巨集定義。
2.巨集定義的應用就是使用#define將指定的識別符號用指定的字串代替。巨集定義也常常用來當作變數名字使用。
#define n int*
n a, b;
// 這裡的a是int*型別,但是b是int型別
3.優點:1.程式修改的方便,對源程式中的部分**可能存在需要替換的情況,這個時候將需要替換的**塊宣告成巨集定義,那麼修改程式只需要修改巨集定義即可,這樣**塊中的目標**塊在預處理的過程中展開即可。
2.部分情況下增加程式效率。巨集定義是替換了**塊,如果不用巨集定義這部分**塊可能是使用函式來代替,但是使用成員函式可以代替函式的呼叫,這樣函式呼叫的開銷就省去了。如果這部分**塊比較小,在函式執行中佔據了大量開銷,這樣就能增加執行效率。但是如果這部分**塊非常大,函式呼叫在其中只佔很小一部分開銷,這樣一來幾乎沒有增加效率。
缺點:1.#define預處理階段對內容直接展開,導致沒有**的檢查,如果展開的**塊存在問題,不會被檢測到,是乙個很大的隱患。不過這個還是要看編譯器,c++ std11的編譯器倒是會提前展開處理問題。
2.優先順序問題,巨集定義後的**塊裡的優先順序如果沒有特別注意到,可能會不是自己想的樣子,產生莫名其妙的問題。有兩種情況,一是括號產生的,二是變數宣告產生的(如上面這個例子,宣告的變數前者是指標型別,後者是常數型別)
巨集定義的優缺點
在用vc程式設計的時候就會遇到很多巨集定義,尤其是類似 long,lpctstr 等等之類的,它們屬於微軟的自定義型別,但其本質上還是屬於c c 裡面的那幾個標準型別。那用巨集定義到底有什麼好處呢?先來看一下巨集的定義 用 define命令將乙個指定的識別符號 即巨集名 來代表乙個字串。它的一般型式...
巨集定義的優缺點
巨集定義的優缺點 當時沒答出來,只知道如果某個常量或者函式名很長的時候可以用巨集定義做替換,這樣的話程式也會比較美觀一點,可讀性也大大增強了。其實在用vc程式設計的時候就會遇到很多巨集定義,尤其是類似 long,lpctstr 等等之類的,它們屬於微軟的自定義型別,但其本質上還是屬於c c 裡面的那...
巨集定義的優缺點
今天中午360的面試官提的乙個問題 巨集定義的缺點。當時沒答出來,只知道如果某個常量或者函式名很長的時候可以用巨集定義做替換,這樣的話程式也會比較美觀一點,可讀性也大大增強了。其實在用vc程式設計的時候就會遇到很多巨集定義,尤其是類似 long,lpctstr 等等之類的,它們屬於微軟的自定義型別,...