功能 | 範例 |
引入標頭檔 | #include <stdio.h> |
定義符號常數 | #define PI 3.14 |
定義巨集 | #define CIRCUM(r) 2 * PI * (r) |
#include 用為引入標頭檔,其後若接角括號 <> ,就是引入標準函數庫的標頭檔,可以使用標準函數庫所提供的功能,而若是接雙引號,雙引號裡頭就可以放置自己寫的標頭檔。
#define 有兩種功能,其一為定義符號常數,形式如下

通常符號常數都為大寫英文字母,如以上的 NAME ,其後接一個空格,然後再接常數值。程式若用到該符號常數的地方,編譯器都會以該數字做替換。這樣的好處為程式有需要調整的常數數值的時候,只需要修改一個地方,不需要把整個程式翻修一次,如下例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #include <stdio.h> #define RATE 31.95 int main( void ) { int m = 100; double r = ( double ) m / RATE; printf ( "今日用%d元可換得%.1f美金\n" , m, r); return 0; } /* 《程式語言教學誌》的範例程式 檔名:define1.c 功能:示範定義符號常數 作者:張凱慶 時間:西元2010年4月 */ |
編譯後執行,如下

由於匯率每天都會變化,若程式中有很多需要匯率代入的地方,利用前置處理器直接定義為符號常數確實有方便的地方。
#define 除了定義符號常數之外,另一個功能就是定義巨集。所謂的巨集是含有運算子的符號常數,可以直接做簡單的計算代換,形式如下

如下例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include <stdio.h> #define PI 3.14 #define DIAMETER(r) 2 * (r) #define CIRCUM(r) 2 * PI * (r) int main( void ) { double radius = 10.; printf ( "圓的半徑 = %f\n" , radius); printf ( "圓的直徑 = %f\n" , DIAMETER(radius)); printf ( "圓周長 = %f\n" , CIRCUM(radius)); return 0; } /* 《程式語言教學誌》的範例程式 檔名:define2.c 功能:示範巨集的使用 作者:張凱慶 時間:西元2010年4月 */ |
編譯後執行,如下

第 4 及第 5 行為巨集定義的地方
4 5 | #define DIAMETER(r) 2 * (r) #define CIRCUM(r) 2 * PI * (r) |
如同函數一樣,巨集中需要參數的地方也要用小括弧圍起來,其後運算式所計算出的值會代入巨集之中。利用巨集做簡單的計算會比呼叫函數快很多,因為巨集的直接插入原始碼中,而函數呼叫會產生堆疊。
沒有留言:
張貼留言