Chinaunix首页 | 论坛 | 博客
  • 博客访问: 880502
  • 博文数量: 1384
  • 博客积分: 27795
  • 博客等级: 上将
  • 技术积分: 16887
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-12 09:28
个人简介

只是心态,抓住机会。

文章分类

全部博文(1384)

文章存档

2014年(3)

2013年(403)

2012年(978)

分类: LINUX

2012-08-27 09:33:26

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  巨集名稱 

点击(此处)折叠或打开

  1. Example1:
  2.  
  3. #include < stdio.h >
  4. #define PI 3.14159
  5.          main()
  6.          {
  7.            printf("PI=%2.5f",PI);
  8.          }
  9.  
  10.  
  11. 執行結果 :
  12.  
  13.              PI=3.14159


点击(此处)折叠或打开

  1. Example2 :
  2.  
  3.           #include < stdio.h >
  4.           #define add(a,b) a+b
  5.           
  6.  
  7. void main(void)
  8.           {
  9.              int i,j,k;
  10.              i=2;
  11.              j=3;
  12.              k=add(i,j);
  13.  
  14.              printf("i+j=%d\n",k);
  15.           }
  16.  
  17. 執行結果 :
  18.  
  19.               i+j=5

 

点击(此处)折叠或打开

  1. Example3:
  2.  
  3. #include < stdio.h >
  4. #define pstring "This is my first C program.\n"
  5.           
  6.  
  7. void main(void)
  8.        {
  9.         printf(pstring,1);
  10.        }
  11.  
  12.  
  13.  
  14.  
  15.  
  16. 執行結果 :
  17.  
  18.       This is my first C program.


点击(此处)折叠或打开

  1. Example4 :
  2.  
  3.  #include < stdio.h >
  4.    #define compare(a,b) \
  5.             if ( a > b ) \
  6.               printf("a > b"); \
  7.             else \
  8.               if ( a < b ) \
  9.                 printf("a < b");\
  10.               else \
  11.                 printf("a = b");
  12.  
  13.       void main(void)
  14.           {
  15.              int a,b;
  16.              a=5;
  17.              b=10;
  18.              compare(a,b);
  19.           }
  20.  
  21.    執行結果 :
  22.               a < b


点击(此处)折叠或打开

  1. Example5 :
  2.   
  3.  #include < stdio.h >
  4.  #define TURBOC
  5.    
  6. void main(void)
  7.     {
  8.      #ifdef TURBOC
  9.         printf("Borland C compiler.\n");
  10.      #endif
  11.  
  12.      #undef TURBOC
  13.  
  14.      #ifndef TURBOC 为真
  15.          printf("MircoSoft C compiler.\n");
  16.      #endif
  17.     }
  18.  
  19.     執行結果 :
  20.         Borland C compiler.
  21. MircoSoft C compiler.

l          條 件 式 的 編 譯

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

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

<2> 由 以 上 的 敘 述 , 我 們 不 難 發 現 這 些 條 件 式 編 譯 的 成 員 與 前 幾 章 控 制 流 程 

所 提 到 if ... then ... else 的 語 法 十 分 相 似 , 且 連 使 用 方 法 與 原 理 都 非 常 相 似 .



点击(此处)折叠或打开

  1. Example1:
  2.  
  3.    #include < stdio.h >
  4.    #define value 99
  5.  
  6.     void main(void)
  7.     {
  8.       #if value < 100
  9.         printf("value < 100");
  10.       #else
  11.         printf("value >= 100");
  12.       #endif
  13.     }

点击(此处)折叠或打开

  1. 執行結果 :
  2.  
  3.       value < 100
  4. Example2:
  5.  
  6.       #include < stdio.h >
  7.       #define value 100
  8.         
  9. void main(void)
  10.    {
  11.     #if value < 100
  12.        printf("value < 100");
  13.      #elif value > 100
  14.          printf("value > 100");
  15.      #else
  16.          printf("value = 100");
  17.      #endif
  18.   }
  19.  
  20.  執行結果 :
  21.  
  22.           value = 100

 

  

阅读(1269) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~