'#'和'##'是兩個預處理運算符,只能在預處理的過程當中使用。在帶參數的宏定義中,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; }