C語言中關於巨集定義的一點總結
阿新 • • 發佈:2019-02-12
1、常見的巨集定義語句有不帶引數的巨集定義和帶引數的巨集定義兩種
2、帶引數的巨集定義,在比較複雜時,往往通過\字元進行換行分割,來使其更加清晰。
比如:
#include <stdio.h>
#include <string.h>
#define FUNC(a, b) \
printf("The add of "#a" and "#b" is %d\n", ((a)+(b)))
int main()
{
int m = 30;
int n = 20;
FUNC(m, n);
return 0;
}
3、#符號的作用
在巨集定義語句中,該符號有特殊的作用,其功能相當於將巨集引數格式化輸出為字串。在上述程式碼中,其最終的結果為:
The add of m and n is 50
注意:在使用該符號時,要在兩邊加雙引號,這樣才能得到預期的結果。
4、##符號的作用
在巨集定義語句中該符號為巨集連線符,用來連線變數名。
#include <stdio.h>
#include <string.h>
#define FUNC(a, b) \
printf("%d\n", a##b)
int main()
{
int m = 30;
int n = 20;
int mn = 50;
FUNC(m, n);
return 0;
}
在上述程式碼中,m和n被連線為mn,又因為mn已經被定義為了50,所以最後輸出50。
5、關於可變引數巨集
可變引數巨集的呼叫形式,常有以下兩種:
#define debug(...) printf( __VA_ARGS__)
#include <stdio.h>
#include <string.h>
#define debug(...) printf(__VA_ARGS__)
int main()
{
int m = 30;
debug("m is %d\n", m);
return 0;
}
輸出結果通printf一致
#define debug(arg...) printf(arg) 這種表達形式同上述形式一致,相當於給巨集可變引數起了個名字,但是這麼寫可讀性更強並且更容易進行描述。
以上兩種方式均跟具體的編譯器相關。