C C 編譯預處理

2021-07-23 09:01:53 字數 1598 閱讀 4269

1.c/c++

編譯預處理

預處理(或稱預編譯

)是指在進行編譯的第一遍掃瞄

(詞法掃瞄和語法分析

)之前所作的工作。預處理指令指示在程式正式編譯前就由編譯器進行的操作,可放在程式中任何位置。

預處理是

c語言的乙個重要功能,它由預處理程式負責完成。當對乙個原始檔進行編譯時,系統將自動引用預處理程式對源程式中的預處理部分作處理,處理完畢自動進入對源程式的編譯。 c

語言提供多種預處理功能,主要處理

#開始的預編譯指令,如巨集定義

(#define)

、檔案包含

(#include)

、條件編譯

(#ifdef)

等。合理使用預處理功能編寫的程式便於閱讀、修改、移植和除錯,也有利於模組化程式設計。 2.

巨集定義

巨集定義有兩種:(1

)無參巨集定義

格式為:

#define 識別符號 字串

舉例:

#define max_time 1000
(2

)帶參巨集定義

格式為:

#define 巨集名(形參表) 字串

舉例:

#define inc(x) x+1  //巨集定義

y = inc(5); //巨集呼叫

3.

檔案包含

檔案包含有有兩種書寫形式:

#include #include "header.h"

如果頭檔名在尖括號

(<>)

裡,那麼認為該標頭檔案是標準標頭檔案。編譯器將會在預定義的位置集查詢該標頭檔案,這些預定義的位置可以通過設定查詢路徑環境變數或者通過命令列選項來修改。如果頭檔名在一對引號裡,那麼認為它是非系統標頭檔案,非系統的標頭檔案的查詢通常開始於原始檔所在的路徑。

另外,標頭檔案的包含存在重複包含的檔案,那麼我們常常在標頭檔案中加入條件編譯的指令來避免被重複包含。方法類似如下:

#ifndef salesitem_h

#definesalesitem_h

//definition of myself code…

#endif

4.條件編譯

條件編譯有三種形式:(1

)#ifdef形式

#ifdef 識別符號 (或#if defined 識別符號)

程式段1

#else

程式段2

#endif

(2

)#ifndef形式

#ifndef 識別符號 (或#if !(defined 識別符號))

程式段1

#else

程式段2

#endif

(3

)#if形式

#if 常量表示式

程式段1

#else

程式段2

#endif

C C 編譯預處理

今天做練習用到頭檔案包含時遇到了 redefinition 的報錯。仔細一看才發現是 我沒有很好地使用條件編譯來協調標頭檔案包含關係 平常說的 標頭檔案衛士 就這麼回事 於是找來塵封已久的 c預處理程式 在用c編譯程式對c源 進行編譯之前,即在語法分析 生成和優化之前,由c 預處理程式對源 進行第一...

c c 編譯預處理

1 include 頭檔名稱 2 include 頭檔名稱 第一種形式一般用來包含開發環境提供的庫標頭檔案,它指示編譯預處理器 在開發環境中設定的路徑中找所需的標頭檔案。第二種形式一般用來包含自己寫的標頭檔案,它指示編譯預處理器在當前工 作目錄中搜尋標頭檔案,如果找不到再到開發環境所設定的路徑中找 ...

C C 編譯預處理指令

眾所周知,你的程式編譯前要做的事就是掃瞄源 對其做初步的轉換,產生新的源 提供給編譯器,這個過程就叫編譯預處理。這個處理過程由預處理器來完成,預處理器是在程式真正執行前由編譯器呼叫的預處理程式。常見的預處理有以下三種 include 是一種最為常見的預處理,主要是做為檔案的引用組合源程式正文。巨集替...