C語言:代碼宏詳解
1、定義宏
#define ARRAY_SIZE 100 double data[ARRAY_SIZE];
如下圖,上方代碼在編譯器進(jìn)行宏替換時會將代碼中的ARRAY_SIZE替換成100

2、宏函數(shù)
宏函數(shù)的參數(shù)是沒有任何類型的概念的,因此
宏函數(shù)使用如下,代碼中的MAX(3,4)會替換成宏定義的表達(dá)式
#define MAX(a,b) a > b ? a : b int n1 = MAX(3,4);

注意

上方替換出錯,是因為給宏函數(shù)的參數(shù)傳遞的是一個表達(dá)式,可以使用下圖方法

宏函數(shù)的參數(shù)不要傳表達(dá)式,如下圖,表達(dá)式進(jìn)行了2次運算

3、多行宏
使用斜杠連接下一行代碼,適用于代碼很長的宏
#define IS_HEX_CHARACTOR(ch) \
( (ch) >= '0' && (ch) <= '9') || \
( (ch) >= 'A' && (ch) <= 'F') || \
( (ch) >= 'a' && (ch) <= 'f')
int main(){
printf("is hex charactor:%d", IS_HEX_CHARACTOR('a'));
}

4、宏變長參數(shù)
#define PRINTLNF(format, ...) printf(format, __VA_ARGS__)


5、原樣輸出變量名

6、例子
#include <stdio.h>
#define PRINTF(format, ...) printf("("__FILE__":%d) %s: "format,__LINE__,__FUNCTION__, ##__VA_ARGS__)
#define PRINT_INT(value) PRINTF(#value":%d \n", value)
int main(){
int no = 1;
PRINT_INT(no);
return 0;
}

7、宏與函數(shù)的差異

總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
C++之構(gòu)造函數(shù)默認(rèn)值設(shè)置方式
這篇文章主要介紹了C++之構(gòu)造函數(shù)默認(rèn)值設(shè)置方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08
C++ 類中有虛函數(shù)(虛函數(shù)表)時 內(nèi)存分布詳解
下面小編就為大家?guī)硪黄狢++ 類中有虛函數(shù)(虛函數(shù)表)時 內(nèi)存分布詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-12-12

