1
從Programming in C (3rd edition),頁309:爲什麼宏需要比等價定義的函數佔用更多空間?
因爲宏直接由 預處理器代入該程序,它們不可避免地使用更多的存儲器空間比一個 等效定義的函數。
在哪種意義下,宏比同等定義的函數佔用更多空間?
從Programming in C (3rd edition),頁309:爲什麼宏需要比等價定義的函數佔用更多空間?
因爲宏直接由 預處理器代入該程序,它們不可避免地使用更多的存儲器空間比一個 等效定義的函數。
在哪種意義下,宏比同等定義的函數佔用更多空間?
正如您的引用所述,宏的文本被預處理器直接替換爲代碼。例如
#define ABSOLUTE_VALUE(x) (((x) < 0) ? -(x) : (x))
int absoluteSum(int a, int b) {
return ABSOLUTE_VALUE(a) + ABSOLUTE_VALUE(b);
}
變爲:
int absoluteSum(int a, int b) {
return (((a) < 0) ? -(a) : (a)) + (((b) < 0) ? -(b) : (b));
}
預處理後
。傳統的函數調用不會這樣做。如果您在代碼中使用了兩次宏,則該宏的代碼會被替換兩次,從而增加內存佔用量。使用傳統函數時,宏的代碼只能被找到並編譯一次,如下所示。
int abs(int value) {
return (((value) < 0) ? -(value) : (value));
}
int absoluteSum(int a, int b) {
return abs(a) + abs(b);
}