我發現這個宏觀問題將是非常有趣的。
如果下面的代碼定義爲宏
#define MULT(x, y) x * y
而且函數調用作出int z = MULT(3 + 2, 4 + 2);
。 期望的輸出是3 + 2 = 5和4 + 2 = 6並且5 * 6爲30.
但是返回的輸出是13。 它將其作爲3 + 2 * 4 + 2。因此,根據運算符的優先級,它首先評估2 * 4。
這是什麼問題? 如果這些功能較小的功能哪一個更高效?定義函數或使用宏?
我發現這個宏觀問題將是非常有趣的。
如果下面的代碼定義爲宏
#define MULT(x, y) x * y
而且函數調用作出int z = MULT(3 + 2, 4 + 2);
。 期望的輸出是3 + 2 = 5和4 + 2 = 6並且5 * 6爲30.
但是返回的輸出是13。 它將其作爲3 + 2 * 4 + 2。因此,根據運算符的優先級,它首先評估2 * 4。
這是什麼問題? 如果這些功能較小的功能哪一個更高效?定義函數或使用宏?
試試這個:
#define MULT(x, y) ((x) * (y))
就個人而言,我認爲這是更具可讀性(和更少的按鍵),以不使用宏。這是有人開始在學習新事物的過程中加入他們的代碼並在後來感到遺憾的事情。
您仍然缺少括號。想象一下'z/MULT(x,y)' – Shahbaz
這麼多重複... –
你如何衡量效率?編碼時間,執行時間,可維護性... –
該宏可能更有效。如果優化器內聯函數,它們可能是等價的。 –