關于C語言宏定義的技巧:'#'和'##'
'#'和'##'
??'#'和'##'是兩個預處理運算子,只能在預處理的程序中使用,在帶引數的宏定義中,
-
'#'運算子后面應該跟一個引數,前處理器會把這個引數轉換為一個字串,
-
'##'運算子被稱為記號連接運算子,比如我們可以使用##連接兩個引數,
可變引數
??帶引數的宏定義也是可以使用可變引數的;
#define SHOWLIST(...) printf(# __VA_ARGS__)
??其中...表示使用可變引數,__VA_ARGS__在于處理中被實際的引數集所替換,
#可以這樣用
#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;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/40822.html
標籤:C
上一篇:VC6.0設定注釋快捷鍵
