預處理命令,巨集定義,檔案包含,條件編譯

2021-09-25 16:11:29 字數 2070 閱讀 6493

(1)c語言的預處理命令都是以「#」號開始的,他們不是c語言的語句,是在預編譯時處理的。

(2)巨集定義分為兩種:不帶引數的巨集和帶引數的巨集(所謂的函式巨集)

(3)巨集定義時末尾一般不要加分號

(4)巨集擴充套件的整體或引數一般要用()括起來

(5)檔案包含是編寫c語言程式中不可缺少的,很重要

(6)使用條件編譯的主要原因:一是便於移植程式,二是方便程式除錯

#define   識別符號   單詞串
1巨集名的作用域是從#define定義之後直到該巨集定義所在檔案結束,但通常把#define巨集定義放在源程式檔案的開頭部分。如果需要終止巨集的作用域,可以使用#undef命令,其一般格式為:

#undef   識別符號
2巨集定義可以巢狀定義但是不能遞迴定義。

3程式中字串常量即雙引號中的字元,不能作為巨集進行巨集替換操作。

4巨集可以被重複定義

5在定義巨集是如果巨集是乙個表示式,那麼一定要將這個表示式用()括起來

#define   識別符號(引數列表)   單詞串
參數列由乙個或多個引數構成,引數只有引數名,沒有資料型別符,引數之間用逗號隔開,引數名需是合法的識別符號

單詞串是巨集的內容文字,也稱為巨集體,其中通常會引用巨集的引數

帶引數的巨集與函式之間的區別。。。

乙個c語言源程式通過#include命令將另乙個檔案的全部內容包含進來。

預編譯器是這樣來處理#include命令的:將被包含檔案的內容插入到源程式中#include命令的位置,一形成新的源程式。

使用算引號「 」:系統首先到當前目錄下查詢被包含檔案,如果沒有找到,再到系統指定的「檔案包含目錄」去查詢。#include "c:\prg\p1.h"在同檔案中除可以包含巨集定義外,還可以包含外部變數定義,結構定義型別等。

一條包含命令只能制定乙個被包含檔案。如果要包含n個檔案,則需要n條包含命令。

檔案包含可以巢狀,即被包含檔案中又包含另乙個檔案。

條件編譯有幾種常見的形式

1#if … #endif

#if	條件1

程式段1

#elif 條件2

程式段2

. ..#else

程式段n

#endif

if後面的條件必須是乙個常量表示式

#if和#elif常常與defined命令配合使用,defined命令的格式為:

defined (巨集名) 		或		defined 巨集名
其功能是判斷某個巨集是否已經定義,如果已經定義,defined命令返回1,否則返回0.defined命令只能與#if或#elif配合使用,不能單獨使用。例如,#if defined(usa)的含義是「如果定義了巨集usa」。

2#ifdef … #endif

#ifdef		巨集名

程式段 1

#else

程式段 2

#endif

「#ifdef 巨集名"的含義是判斷是否定義了巨集,它等價於」#if defined (巨集名)"

其作用是:如果巨集名已被#define行定義了,則編譯程式段1,否則編譯程式段2

3#ifndef … #endif

#ifndef	巨集名

程式段 1

#else

程式段 2

#endif

條件編譯與分支語句不能混為一談,其區別為

(1)條件編譯是在預編譯時處理;而條件語句則是在程式執行時處理

(2)條件編譯中的條件不可以包含變數名,只能是常量表示式(通常包括巨集名),可以不加括號

(3)…

(4)條件編譯可以放在所有函式的外部,也可以放在某函式的內部;分支語句只能出現在某函式的內部。

(1)便於程式的移植

(2)便於程式的除錯,選擇地輸出臨時結果

預處理 巨集定義 條件編譯

可以用 define命令將乙個指定的識別符號 即巨集名 來代表乙個字串 巨集定義語法 define 巨集名 字串 使用原則 1 原樣替換 2 不能代替函式 3 定義時字尾不要加分號。帶引數的巨集定義 include define s a,b a b 注意,此處不能加分號,否則就變成了s a b in...

預處理 巨集定義

1,預處理 預處理是指在進行編譯的第一遍掃瞄 詞法掃瞄和語法分析 之前所作的工作。預處理是 語言的乙個重要功能,它由預處理程式負責完成。當對乙個原始檔進行編譯時,系統將自動引用預處理程式對源程式中的預處理部分作處理,處理完畢自動進入對源程式的編譯。語言提供了多種預處理功能,如巨集定義 檔案包含 條件...

C 預處理 巨集定義

開發乙個 c語言程式,讓它暫停 5 秒以後再輸出內容 helllo 並且要求跨平台,在 windows 和 linux 下 include 說明 在windows 作業系統和 linux作業系統下,生成原始碼不一樣 if win32 如果是windows平台,就執行 include elif lin...