C++中#define用法

來源:互聯網
上載者:User

link address:http://blog.sina.com.cn/s/blog_686188ef0100klku.html

#define是C語言中提供的宏定義命令,其主要目的是為程式員在編程時提供一定的方便,並能在一定程度上提高程式的運行效率,但學生在學習時往往不能 理解該命令的本質,總是在此處產生一些困惑,在編程時誤用該命令,使得程式的運行與預期的目的不一致,或者在讀別人寫的程式時,把運行結果理解錯誤,這對 C語言的學習很不利。
1 #define命令剖析
1.1 #define的概念
#define命令是C語言中的一個宏定義命令,它用來將一個標識符定義為一個字串,該標識符被稱為宏名,被定義的字串稱為替換文本。
該命令有兩種格式:一種是簡單的宏定義,另一種是帶參數的宏定義。
(1) 簡單的宏定義:
#define <宏名>   <字串>
例: #define PI 3.1415926
(2) 帶參數的宏定義
#define <宏名> ( <參數表>) <宏體>
例: #define A(x) x
一個標識符被宏定義後,該標識符便是一個宏名。這時,在程式中出現的是宏名,在該程式被編譯前,先將宏名用被定義的字串替換,這稱為宏替換,替換後才進行編譯,宏替換是簡單的替換。
1.2 宏替換髮生的時機
為了能夠真正理解#define的作用,讓我們來瞭解一下對C語言來源程式的處理過程。當我們在一個整合的開發環境如Turbo C中將編寫好的來源程式進行編譯時間,實際經過了預先處理、編譯、彙編和串連幾個過程,見圖1。
來源程式

前置處理器

修改後的來源程式

編譯器

組譯工具

彙編器

可重定位的目標程式

連接器

可執行檔目標程式

圖1 C語言的編譯過程

其中前置處理器產生編譯器的輸出,它實現以下的功能:
(1) 檔案包含
可以把來源程式中的#include 擴充為檔案本文,即把包含的.h檔案找到並展開到#include 所在處。
(2) 條件編譯
前置處理器根據#if和#ifdef等編譯命令及其後的條件,將來源程式中的某部分包含進來或排除在外,通常把排除在外的語句轉換成空行。
(3) 宏展開
前置處理器將來源程式檔案中出現的對宏的引用展開成相應的宏 定義,即本文所說的#define的功能,由前置處理器來完成。
經過前置處理器處理的來源程式與之前的來源程式有所有不同,在這個階段所進行的工作只是純粹的替換與展開,沒有任何計算功能,所以在學習#define命令時只要能真正理解這一點,這樣才不會對此命令引起誤解並誤用

 

 

 

THE END!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.