C語言中#、##的用法
阿新 • • 發佈:2018-12-10
一、#
在預處理時,將巨集引數轉換為字串。
#define ToString(x) #x;
printf("%s\n", ToString(test));
預處理後,變為
printf("%s\n", "test");
二、##
預處理時,粘連巨集引數。
#define fn(a, b) void a##b(int)
fn(test, 1);
預處理後,變為
void test1(void);
注意
當有##、#的巨集定義時,巨集中的引數若還是巨集定義,此時該巨集不會被展開。
#define MAX_NUM 7000 #define INT(x) #x #define X 2 #define CON(x) int(x##x) printf("%s", INT(MAX_NUM)); printf("%d", CON(X)); //巨集定義展開 //printf("%s", "MAX_NUM"); //printf("%d", int(XX));
解決
#define MAX_NUM 7000
#define _INT(x) #x //轉換巨集
#define INT(x) _INT(x)
#define X 2
#define _CON(x) int(x##x)
#define CON(x) _CON(x) //轉換巨集
printf("%s", INT(MAX_NUM));
printf("%d", CON(X));
//巨集定義展開
//printf("%s", "7000");
//printf("%d", 22);