巨集和函式的區別以及巨集的一些簡單用法介紹
阿新 • • 發佈:2018-12-30
巨集和函式的區別
巨集的定義:#define 機制包括了一個規定,允許把引數替換到文字中,這種實現通常稱為巨集(macro),或者定義巨集(define macro)。 函式:它負責完成某項特定任務,而且相較於其他程式碼,具備相對的獨立性。每次使用時只需要呼叫即可 —————————————————————————————————————————————————————————————————————————————— 函式和巨集的區別主要從下面幾個方面來討論: 1.程式碼長度: 巨集:每次使用時程式碼巨集都會被插入到程式中,除了非常小的巨集之外,會將程式的篇幅大大增長。 函式:函式的程式碼只出現在一個位置,每次使用函式時,就呼叫那個位置的程式碼。巨集的一些簡單用法介紹
巨集的申明方式: #define name(x) x*x 注意:引數列表的左括號必須與name緊鄰。 如果兩者之間有空白,引數列表會被解釋為x*x中的一部分。 使用巨集的一些需要注意的地方(坑): 1.括號問題 如 #define square(x) x*xint main()
{
printf("%d\n",square(2+1));
return 0;
}
如果你認為答案是9,那就進坑了
實際在編譯過程中,已經將巨集文字替換,priintf("%d\n",2+1*2+1);
現在看起來一目瞭然,結果是5。
2.#和##在巨集 中的使用
使用#把一個巨集引數轉化其對應的字串。
例:
int i = 10;
#define PRINT(FORMAT,VALUE) printf("the value of\
" #VALUE " is "FORMAT"\n",VALUE);
PRINT("%d",i+3);
return 0;
##把兩邊的符號合為一個符號 例:
#define ADD_TO_SUM(num,value) sum##num += value;
int sum5 = 0;
int ret = ADD_TO_SUM(5,10);
printf("%d",ret);
將num=5賦值後,此時的sum##num相當於,sum5 += 10;