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