C宏的天才用法

來源:互聯網
上載者:User
      看看人家老外是怎麼用宏的。這個例子摘自《C專家編程》。 根據位元模式構建圖形表徵圖(icon)或者圖形(glyph),是一種小型的位元模式映射於螢幕產生的映像。一個位代表映像上的一個像素。如果一個位被設定,那麼它所代表的像素就是“亮”的。如果一個位被清除,那麼它所代表的像素就是“暗”的。所以,一系列的整數值能夠用於為映像編碼。類似Iconedit這樣的工具就是用於繪圖的,他們所輸出的是一個包含一系列整型數的ASCII檔案,可以被一個視窗程序所包含。它所存在的問題是程式中的表徵圖只是一串十六進位數。在C語言中,典型的16X16的黑白圖形可能如下:static unsigned short stopwatch[] = {
  0x07C6,
  0x1FF7,
  0x383B,
  0x600C,
  0x600C,
  0xC006,
  0xC006,
  0xDF06,
  0xC106,
  0xC106,
  0x610C,
  0x610C,
  0x3838,
  0x1FF0,
  0x07C0,
  0x0000
};

   正如所看到的那樣,這些C語言常量並未有提供有關圖形實際模樣的任何線索。這裡有一個驚人的#define定義的優雅集合,允許程式建立常量使它們看上去像是螢幕上的圖形。#define X )*2+1
#define _ )*2
#define s ((((((((((((((((0 /* For building glyphs 16 bits wide */

   定義了它們之後,只要畫所需要的表徵圖或者圖形等,程式會自動建立它們的十六進位模式。使用這些宏定義,程式的自描述能力大大加強,上面這個例子可以轉變為:static unsigned short stopwatch[] =
{
s _ _ _ _ _ X X X X X _ _ _ X X _ ,
s _ _ _ X X X X X X X X X _ X X X ,
s _ _ X X X _ _ _ _ _ X X X _ X X ,
s _ X X _ _ _ _ _ _ _ _ _ X X _ _ ,
s _ X X _ _ _ _ _ _ _ _ _ X X _ _ ,
s X X _ _ _ _ _ _ _ _ _ _ _ X X _ ,
s X X _ _ _ _ _ _ _ _ _ _ _ X X _ ,
s X X _ X X X X X _ _ _ _ _ X X _ ,
s X X _ _ _ _ _ X _ _ _ _ _ X X _ ,
s X X _ _ _ _ _ X _ _ _ _ _ X X _ ,
s _ X X _ _ _ _ X _ _ _ _ X X _ _ ,
s _ X X _ _ _ _ X _ _ _ _ X X _ _ ,
s _ _ X X X _ _ _ _ _ X X X _ _ _ ,
s _ _ _ X X X X X X X X X _ _ _ _ ,
s _ _ _ _ _ X X X X X _ _ _ _ _ _ ,
s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
};

   顯然,與前面的代碼相比,它的意思更為明顯。標準的C語言具有八進位、十進位和十六進位常量,但沒有二進位常量,否則的話倒是一種更為簡單的繪製圖形模式的方法。

   如果抓住書的右上方,並斜這看這一頁,可能會猜測這是一個用於流行視窗系統的“cursor busy”小秒錶圖形。我是在幾年前從Usenet comp.lang.c新聞群組學到這個技巧的。

   千萬不要忘了在繪圖結束後清除這些宏定義,否這很可能會給你後面的代碼帶來不可預測的後果。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.