C語言中如何定義函數式宏
導語:眾所周知,宏擴展是純粹的文本擴展,若定義不明確,就會導致結果錯誤,或者編譯錯誤,尤其是定義函數式宏時,下面有三條規則可以使我們避免出錯。具體有哪些呢?一起來學習下吧:
規則1:宏體必須使用括號包起來,以便保護表達式中低優先級的操作符。
例:
#define square(x)x*x
調用如下:
1/square(n)
會被擴展為
1/n*n
這等價於(1/n)*n,而我們需要的是
1/(n*n)
規則2:在宏定義內部,所有參數的出現都必須用括號括起來,以便保護實參中任何低優先級的'操作符不受宏擴展其他部分的影響。
同樣以square()為例,調用
square(n+1);
會被擴展為
n+1*n+1
但我們需要的是
(n+1)*(n+1)
規則3:如果一個參數在擴展中出現了多次,並且實參是帶有副作用的表達式,則宏可能不能正確運行。
再以square()宏為例,調用
square(i++)
會被擴展為
i++*i++
這很顯然是未定義的
遵循規則1和規則2的正確square宏的定義應該是:
#define square(x) ( (x) * (x) )
-
C語言的移位操作符使用方法
位移位運算符是將數據看成二進制數,對其進行向左或向右移動若干位的運算。位移位運算符分為左移和右移兩種,均為雙目運算符。第一運算對象是移位對象,第二個運算對象是所移的二進制位數。以下是小編為大家搜索整理的C語言的移位操作符使用方法,希望能給大家帶來幫...
-
2017年計算機二級C語言考前訓練題及答案
計算機二級對於很多考生來説還是比較有難度的,那麼怎樣順利通過二級考試呢?這就需要大家平時多練習和找方法了。以下是本站小編整理的2017年計算機二級C語言考前訓練題及答案,希望對大家有幫助!考前訓練題一1:第1題m個人的成績存放在score數組中,請編寫函數fun,它...
-
淺談高職C語言課程的教學分析與設計
C語言作為學院網絡技術專業的人門課程,旨在通過鍛鍊學生的邏輯思維,牆養學生在職業崗位中實際應用的能力.目前,該專業的學生畢業後主要從事網站開發和網絡管理等方面的工作,而在這些領域幾乎都以C語言作為應用的開發工具.但從歷年教學實踐來看,教師往往付出的精力多...
-
C語言的指針類型講解
C語言的指針類型包括兩方面的信息:一是地址,存放在指針變量中;二是類型信息,下面是小編為大家整理的C語言的指針類型講解,歡迎參考~指針存儲了內存的地址,同時指針是有類型的,如int*,float*,那麼,一個自然的猜想就是指針變量應該存儲這兩方面的信息:地址和指針類型,比如,就...