C語言中#define ##結構兩邊字符連接


1 #include<stdio.h>
2 #define ADD_TO_SUM(sum_number,value) sum ## sum_number += value
3         
4 
5 int main()
6 {
7     ADD_TO_SUM(5 , 25);
8 }

注意此代碼不可以生成可執行文件,我的編譯環境是gcc,首先我創建一個ceshi.c文件,然后執行gcc  -E  -o  ceshi.c  ceshi.i

生成ceshi.i文件,我打開:貼上截圖!

可以看見主函數里面是替換成sum5 += 25的了,直接將未定義的sum和sum_number連接到一起了,value也被替換成25:

注意!不可以編譯生成可執行文件,因為我編譯后的圖片貼上!

 

想要體驗編譯的感覺的話,我找到類似回答:

##在C/C++中具有連接字符串的作用。例如:
執行完A ## B后變為AB(連接A和B並去掉空格)。

下面通過具體實例來說明##的工作原理:

假設程序中已經定義了這樣一個帶參數的宏:
#define paster( n ) printf( "token" #n " = %d", token##n )
同時又定義了一個整形變量:
int token9 = 9;
現在在主程序中以下面的方式調用這個宏:
paster(9);
那么在編譯時,上面的這句話被擴展為:
printf( "token" "9" " = %d", token9 );
注意到在這個例子中,paster(9);中的這個”9”被原封不動的當成了一個字符串,與”token”連接在了一起,從而成為了token9,而#n也被”9”所替代。
可想而知,上面程序運行的結果就是在屏幕上打印出token9=9

此處的token9由於是被定義了的,可以編譯,可以順便跑下gcc。
雖然不知道有什么用,但是還是記一下,萬一哪天自己還需要看呢!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM