1. 程式人生 > >c語言的巨集

c語言的巨集

今天想在巨集名中使用巨集,如#define macroname##postfix,但是發現不行,好像c語言的巨集沒法弄出這種效果吧。暫時放一下,不琢磨了。


c語言預處理命令詳解

http://www.360doc.com/content/15/0114/22/9200790_440805135.shtml


c語言巨集

https://wenku.baidu.com/view/efd65365783e0912a3162a04.html


使用這麼一個規則,可以建立一個很有趣的技術:打印出一個巨集被展開後的樣子,這樣可以

方便你分析程式碼:

 

   #define TO_STRING( x ) TO_STRING1( x ) 

   #define TO_STRING1( x ) #x 

   TO_STRING

首先會將x全部展開(如果x也是一個巨集的話),然後再傳給TO_STRING1轉換為字串,現在你可以這樣:

   const char *str = TO_STRING( PARAM( ADDPARAM( 1 ) ) );

去一探PARAM展開後的樣子

使用這麼一個規則,可以建立一個很有趣的技術:打印出一個巨集被展開後的樣子,這樣可以方便你分析程式碼: 
   #define TO_STRING( x ) TO_STRING1( x )    #define TO_STRING1( x ) #x 
   TO_STRING首先會將x全部展開(如果x也是一個巨集的話),然後再傳給TO_STRING1轉換為字串,現在你可以這樣: 
   const char *str = TO_STRING( PARAM( ADDPARAM( 1 ) ) );去一探PARAM展開後的樣子。

一個很重要的補充:就像我在第一點說的那樣,如果一個像函式的巨集在使用時沒有出現括號,那麼前處理器只是 
   將這個巨集作為一般的符號處理(那就是不處理)


C語言常用巨集定義

https://wenku.baidu.com/view/258f0463caaedd3383c4d30e.html?re=view


c語言巨集的高階應用

https://wenku.baidu.com/view/c95888ce05087632311212f5.html

C語言巨集巢狀

http://blog.163.com/m13591120447_1/blog/static/21637918920137811837285/


C語言巨集高階用法 [總結]


http://www.cnblogs.com/Anker/p/3418792.html