(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...