2014-09-28 50 views

回答

2

正如您的引用所述,宏的文本被預處理器直接替換爲代碼。例如

#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); 
} 
相關問題