第10章 預處理

2021-04-19 18:56:43 字數 3403 閱讀 7024

10.1

預處理指令 指令

含義例項

#define

定義巨集#define_debug

#undef

取消巨集的定義

#undef_debug

#if判斷

#if defined_debug

#else

cout<<」debug」<

#elif

#else

#endif

cout<<」release」<

#error

輸出錯誤資訊

#error invalid parameter

#include

包含檔案

#include

10.2

巨集指令

又稱替換指令

10.2.1巨集

#define

指令用以定義乙個巨集

(macro)

,如:

#define max 9 //

預處理之後,這些

max將會被替換成

9預處理語句不需要分號「

;

也可以將巨集定義為乙個表示式,如:

#define max 9

#define max2 max*max

10.2.2

帶引數的巨集

巨集可以包含引數,如:

#define square(x) x*x

int main()

定義巨集函式的時候沒建議將引數和表示式加上盡可能多的「

()」,如:

#define square(x) ((x)*(x))

也可以定義包含多個引數的巨集函式,如:

#define add(a,b) ((a)+(b))

巨集函式的有點,避免了

c++的強型別檢測

10.2.3

巨集與常數、函式

*p163

10.2.4 #

操作符??

如果巨集定義中出現

#,預處理器會將其

#後面的引數括成乙個字串進行替換

10.2.5 ##

操作符

##用以將

2側的引數合併成乙個,如:

#define rgb (rr,gg,bb) 0x##rr##gg##bb

int red = rgb(ff,00,00);

該語句會被替換為

int red = 0xff0000;

10.2.6

取消巨集

巨集不允許被重新定義

#define size 10

#define size 12 //error

要修改巨集的值,必須先取消他,「

#undef

」用以取消指定名字的巨集,如:

#define size 10

#undef size

#define size 12//ok

10.2.7 c++

預定義巨集

以下巨集不需要定義,已經定義好了

巨集名稱含義

__line__

整數,代表當前**所在行數

__file__

字串,代表當前**所在的檔案路徑

__date__

字串,代表當前檔案的編譯日期,格式「

mmm dd yyyy

」__time__

字串,代表當前檔案的編譯時間,格式「

hh:nn:ss

」__stdc__

代表是否為標準

c__cplusplus

長整數,代表當前的

c++版本

10.3

條件編譯指令

10.3.1 #if…#endif

類似與流程控制中的

if語句

10.3.2 #else

#else

與#if

配套使用,與流程控制一樣,它指定

#if條件不符合時候的操作

10.3.3 #elif

#elif

為#else #if

的組合

10.3.4 #if defined

和#if !defined

#if defined

用以檢測指定的巨集是否已定義,如:

#if defined version

cout << 「

軟體版本:

」<< version << endl;

#else

cout << 「

未指定版本

」 << endl;

#endif

可以使用!操作符,指定某個巨集沒有被定義的情形,如:

#if !defined version

cout << 「

未指定版本

」 <

#endif

10.4

檔案包含指令

10.4.1 #include

當#include

指令後的檔名用「<>」括起來,它只是預處理器從與捨得標準路徑中搜尋指定的標頭檔案

另一種用「""」括起來的表示從相對路徑搜尋

c標準庫的標頭檔案包括:

:assert

巨集的定義 :

字元操作函式的宣告 :

錯誤碼的定義 :

數學函式庫 :

錯誤處理庫 :

可變引數處理巨集的定義 :

標準輸入輸出函式的宣告 :

梳子函式、記憶體管理函式、系統函式、隨機函式的宣告 :

時間、日期操作函式宣告 :c

型別的字串的操作函式宣告

c++標準庫的標頭檔案包括::

字串

:流操作 :

檔案流 :複數

:標準異常

stl:標準模板庫

10.4.2

合理使用標頭檔案

被包含的檔案通常被成為「標頭檔案」

一般設計標頭檔案的時候加入一下部分可以避免重定義的發生

#ifndef __header_point_h__

#define__header_point_h__

結構#endif

head_h

部分可以隨便換

10.5

其他標準指令

10.5.1 #error

當編譯器遇到

#error

指令時,他會聽下來,並在編譯視窗(不是執行視窗)輸出

#error

後面的資訊

10.5.2 #line

用以改變當前行的行號和檔名,如:

#line 100

#line 100 「core.cpp」

10.5.3 #pragma

每個編譯器可以定義屬於他自己的

#progma

指令

第21章 預處理

1 巨集的高階使用 va args file function 等 2 va args 的用法 1.1 用在預編譯語句裡面可以把預編譯函式的變數直接格式成字串 如 define func1 x printf the square of x is d.n x x 呼叫func1 30 則輸出 the ...

第4章 資料預處理

inner join匹配查詢 select record date,city,age,category,price,gender,pay,mp from data1 inner join data2 on data1.id data2.id left join匹配查詢 select record d...

第14章 預處理器

c預處理器在源 編譯之前對其進行一些文字性質的操作。它的主要任務包括刪除注釋 插入被 include指令包含的檔案的內容 定義和替換由 define指令定義的符號以及確定 的部分內容是否應該根據一些條件編譯指令進行編譯。在 define中,如果定義的內容很長,可以分成幾行,除了最後一行之外,每行的末...