C巨集的天才用法

2022-09-06 22:48:21 字數 885 閱讀 6898

看看人家老外是怎麼用巨集的。這個例子摘自《c專家程式設計》。 根據位模式構建圖形圖示(icon)或者圖形(glyph),是一種小型的位模式對映於螢幕產生的影象。乙個位代表影象上的乙個畫素。如果乙個位被設定,那麼它所代表的畫素就是「亮」的。如果乙個位被清除,那麼它所代表的畫素就是「暗」的。所以,一系列的整數值能夠用於為影象編碼。類似iconedit這樣的工具就是用於繪圖的,他們所輸出的是乙個包含一系列整型數的ascii檔案,可以被乙個視窗程式所包含。它所存在的問題是程式中的圖示只是一串十六進製制數。在c語言中,典型的16x16的黑白圖形可能如下:

static unsigned short stopwatch = ;

正如所看到的那樣,這些c語言常量並未有提供有關圖形實際模樣的任何線索。這裡有乙個驚人的#define定義的優雅集合,允許程式建立常量使它們看上去像是螢幕上的圖形。

#define x )*2+1

#define _ )*2

#define s ((((((((((((((((0 /* for building glyphs 16 bits wide */

定義了它們之後,只要畫所需要的圖示或者圖形等,程式會自動建立它們的十六進製制模式。使用這些巨集定義,程式的自描述能力大大加強,上面這個例子可以轉變為:

static unsigned short stopwatch =

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

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

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

C巨集的用法

前幾天參加某公司的筆試,有一道題是用純c實現乙個泛型函式。鬱悶了好久用c 模板實現了。巨集有如下的特點 1.與const相比,巨集是在預編譯的時候完成的 2.define 只做簡單的替換,不做型別安全檢查 3.使用不當會引起很多問題 巨集的用法 1.簡單的巨集定義 define max 1024 2...

C 巨集中 和 的用法

我們使用 把巨集引數變為乙個字串,用 把兩個巨集引數貼合在一起.用法 include include using namespace std define str s s define cons a,b int a e b int main 需要注意的是凡巨集定義裡有用 或 的地方巨集引數是不會再展...

C 巨集中 的用法

c語言中的巨集是乙個很簡單粗暴的設計,主要功能就是replace。為了更方便地替換,引入了巨集函式這一概念。巨集函式用引數替換預先定義的識別符號在巨集定義中的每一次出現。配合 和 可以用巨集簡單高效地完成一些複雜的操作。稱之為字串化操作符 stringizing operator 它將函式巨集的實際...