關於C語言宏定義的技巧:'#'和'##'

關於C語言宏定義的技巧:'#'和'##'

'#'和'##'

  '#'和'##'是兩個預處理運算符,只能在預處理的過程當中使用。在帶參數的宏定義中,code

  • '#'運算符後面應該跟一個參數,預處理器會把這個參數轉換爲一個字符串。orm

  • '##'運算符被稱爲記號鏈接運算符,好比咱們可使用##鏈接兩個參數。字符串

可變參數

  帶參數的宏定義也是可使用可變參數的;it

#define SHOWLIST(...) printf(# __VA_ARGS__)io

  其中...表示使用可變參數,__VA_ARGS__在於處理中被實際的參數集所替換。form

#能夠這樣用

#include<stdio.h>

#define STR(s) # s                  //STR 就是定義的宏 ,# 運算符會將 s 變爲字符串的形式

int main(void){

    // printf("%s\n",STR(This is my time.));
    printf(STR(Hellow     %s num = %d\n),STR(This is my life.),520);	//若傳入的字符串中含有多個空格,輸出時只會輸出一個空格

    return 0;
}

##能夠這樣用:

#include<stdio.h>

#define TOGETHER(x,y) x ## y

int main(void){

	printf("%d\n",TOGETHER(13,14));
	printf("%d\n",TOGETHER(5,20));

	return 0;
}

可變參數能夠這樣用:

#include<stdio.h>

#define SHOWLIST(...) printf(# __VA_ARGS__)

int main(void){

	SHOWLIST(I love it,123456,3.14159,bdsakjhdfc\n);

	return 0;
}

可變參數也能夠是空參數:

#include<stdio.h>

#define PRINTF(format,...) printf(# format,## __VA_ARGS__)

int main(void){

	PRINTF(num = %d\n,520);
	PRINTF(Hellow world!!!\n);

	return 0;
}
相關文章
相關標籤/搜索