c语言预处理指令之 ##
生活随笔
收集整理的這篇文章主要介紹了
c语言预处理指令之 ##
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
我們知道, #是預(yù)處理指令的第一個字符。但是##可以在預(yù)處理中作為粘合劑,可以將兩個標識符沾合在一起,如果其中一個是宏操作數(shù),“沾合”會在形式參數(shù)被相應(yīng)的實際操作參數(shù)替換后發(fā)生。考慮下面的宏:
#define MK_ID(n) i##n當MK_ID(比如MK_ID(1))被調(diào)用時,預(yù)處理器首先使用實際參數(shù)替換形式參數(shù)n。接著,預(yù)處理器把 i?和1合并為1個記號(標識符)i1下面的聲明使用MK_ID創(chuàng)建了3個標識符:
int MK_ID(1),MK_ID(2),MK_ID(3)預(yù)處理器把這一聲明變?yōu)?#xff1a;
int i1,i2,i3; #include <stdio.h> /*下面是帶參數(shù)的宏定義,參數(shù)是type,先執(zhí)行參數(shù)替換,然后檢測到有##執(zhí)行沾合*/ #define GENERIC_MAX(type) \type type##_max(type x,type y) \{return x>y?x:y; }/*展開后為: float float_max(float x,float y){return x > y ? x : y; } */ GENERIC_MAX(float); /*同上*/ GENERIC_MAX(int); /*同上*/ GENERIC_MAX(unsigned); /*同上*/ GENERIC_MAX(double); /*同上*/ GENERIC_MAX(char);//上面的代碼,相當于定義了5個函數(shù),分別是 //float float_max(float ,float ) //...... int main() { printf("%lf",float_max(1,2));return 0; }總結(jié)
以上是生活随笔為你收集整理的c语言预处理指令之 ##的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 硬编码 and 软编码
- 下一篇: puts函数,C语言puts函数用法详解