C

l          (preprocessor)

我 們 在 寫 程 式 的 時 候 , 常 常 會 碰 到 某 些 資 料 重 覆 使 用 或 是 某 些 程 式 片 段 因 特 定 的 條 件 下 須 放 棄 , 如 果 以 正 常 的 方 式 來 寫 作 程 式 , 可 能 會 增 加 無 謂 的 程 式 片 段 , 使 的 程 式 笨 重 不 堪 , 但 如 果 能 好 好 運 用 C 語 言 所 提 供 的 前 置 處 理 器 , 則 上 述 的 狀 況 將 改 善 許 多 . 這 個 功 能 並 非 C 語 言 本 身 的 格 式 , 但 仍 為 編 譯 程 式 所 能 接 受 . 對 前 置 處 理 器 的 解 釋 , 如 圖 所 示 , 因 為 它 是 在 程 式 編 譯 之 前 執 行 , 所 以 顧 名 思 義 稱 之 前 置 處 理 .

  

l          

<1> 前 置 處 理 器 的 格 式 如 下:

#前置處理器名稱    處理內容
 

<2> .
<3>
, 使 , .

 

   前置處理器之敘述    

檔案的含入

#include

字串的置換/巨集定義

#define / #undef

#if .... #elif .... #else .... #endif

#ifdef (#ifndef) .... #else .... #endif

l        #include(檔 入)

, 使 . :

 

     <1> #include "檔案名稱" : 此表示系統將會到目前的目錄 (路徑 )
                               下尋找所指定的檔案 ,如果找不到 ,則
                               會去系統設定的目錄底下尋找 .
 
     <2> #include <檔案名稱> : 此表示系統將會到系統設定的目錄底下
                               尋找所指定的檔案 .
 
 
Example:
 
#include < stdio.h >
  #include "def.h"
  
main()
  {
            printf("PI=%2.5f\n",PI);
            printf("a+b=%d\n",a+b);
 }
 
 
-- def.h 的檔案內容 --
 
         #define PI  3.14159
         #define a   10
         #define b   20
   ----------------------
 
      執行結果 :
 
             PI=3.14159
             a+b=30

l        #define(字 / 義)與 #undef

<1> #define 使 :

其 主 要 之 功 能 是 以 簡 單 的 名 稱 取 代 某 些 特 定 的 常 數 或 字 串 , 函 數 , 建 立 更 簡 單 更 易 懂 的 程 式 . 語 法 如 下 :

               #define 巨集名稱 常數或函式或字串
 

<2> #undef 使 :

#define .

 

#undef  巨集名稱
 
Example1:
 
#include < stdio.h >
#define PI 3.14159
         main()
         {
           printf("PI=%2.5f",PI);
         }
 
 
執行結果 :
 
             PI=3.14159
Example2 :
 
          #include < stdio.h >
          #define add(a,b) a+b
          
 
void main(void)
          {
             int i,j,k;
             i=2;
             j=3;
             k=add(i,j);
 
             printf("i+j=%d\n",k);
          }
 
執行結果 :
 
              i+j=5
 
Example3:
 
#include < stdio.h >
#define pstring "This is my first C program.\n"
          
 
void main(void)
       {
        printf(pstring,1);
       }
 
 
 
 
 
執行結果 :
 
      This is my first C program.
Example4 :
 
 #include < stdio.h >
   #define  compare(a,b)      \
            if ( a > b )        \
              printf("a > b");  \
            else                \
              if ( a < b )      \
                printf("a < b");\
              else              \
                printf("a = b");
 
      void main(void)
          {
             int a,b;
             a=5;
             b=10;
             compare(a,b);
          }
 
   執行結果 :
              a < b
Example5 :
  
 #include < stdio.h >
 #define TURBOC
   
void main(void)
    {
     #ifdef TURBOC
        printf("Borland C compiler.\n");
     #endif
 
     #undef TURBOC
 
     #ifndef TURBOC
         printf("MircoSoft C compiler.\n");
     #endif
    }
 
    執行結果 :
        Borland C compiler.
MircoSoft C compiler.

l         

<1> 條 件 式 的 編 譯, 此 用 法 的 最 大 特 色 在 於 其 敘 述 不 僅 可 以 放 在 程 式 的 頂 端 , 亦 可 將 其 敘 述 放 置 於 程 式 中 . 以 下 所 列 (1) ,(2) ,(3) 項 為 條 件 式 編 譯 的 成 員 .

                    (1) #if 和 #endif
                    (2) #else / #elif
                    (3) #ifdef 和 #ifndef
 

<2> , if ... then ... else , 使 .

Example1:
 
   #include < stdio.h >
   #define value  99
 
    void main(void)
    {
      #if value < 100
        printf("value < 100");
      #else
        printf("value >= 100");
      #endif
    }
 
  
 
執行結果 :
 
      value < 100
Example2:
 
      #include < stdio.h >
      #define value  100
        
void main(void)
   {
    #if value < 100
       printf("value < 100");
     #elif value > 100
         printf("value > 100");
     #else
         printf("value = 100");
     #endif
  }
 
 執行結果 :
 
          value = 100
 

 

回資料結構教學大綱  下一單元