第6天 C語言預處理

2021-10-24 13:44:23 字數 1974 閱讀 9843

ansi 標準定義的 c 語言預處理指令:

另外 ansi 標準 c 還定義了如下幾個巨集:

line 表示正在編譯的檔案的行號

file 表示正在編譯的檔案的名字

date 表示編譯時刻的日期字串,例如: 「25 dec 2007」

time 表示編譯時刻的時間字串,例如: 「12:30:55」

stdc 判斷該檔案是不是定義成標準 c 程式

如果編譯器不是標準的,則可能僅支援以上巨集的一部分,或根本不支援。當然編譯器 也有可能還提供其它預定義的巨集名。注意:巨集名的書寫由識別符號與兩邊各二條下劃線構成。

c編譯器提供的預處理功能主要有以下四種:

1)檔案包含 #include

2)巨集定義 #define

3)條件編譯 #if #endif …

4)一些特殊作用的預定義巨集

""表示系統先在file1.c所在的當前目錄找file1.h,如果找不到,再按系統指定的目錄檢索。

< >表示系統直接按系統指定的目錄檢索。

注意:1. #include <>常用於包含庫函式的標頭檔案

2. #include ""常用於包含自定義的標頭檔案

3. 理論上#include可以包含任意格式的檔案(.c .h等) ,但我們一般用於標頭檔案的包含。

#undef 是用來撤銷巨集定義的,用法如下:

#define pi 3.141592654

…// code

#undef pi

//下面的**就不能用 pi 了,它已經被撤銷了巨集定義。

也就是說巨集的生命週期從#define 開始到#undef 結束。很簡單,但是請思考一下這個問題:

#define x 3

#define y x*2

#undef x

#define x 2

intz=y;

z 的值為多少?

#error 預處理指令的作用是,編譯程式時,只要遇到 #error 就會生成乙個編譯錯誤提 示訊息,並停止編譯。其語法格式為:
#error error-message

注意,巨集串 error-message 不用雙引號包圍。遇到#error 指令時,錯誤資訊被顯示,可能同時 還顯示編譯程式作者預先定義的其他內容。

#error用於生成乙個編譯錯誤訊息,並停止編譯

#line用於強制指定新的行號和編譯檔名,並對源程式的**重新編號

#line 的作用是改變當前行數和檔名稱,它們是在編譯程式中預先定義的識別符號

命令的基本形式如下:

#line number[「filename」]

其中內的檔名可以省略。

例如:#line 30 a.h

其中,檔名 a.h 可以省略不寫。 這條指令可以改變當前的行號和檔名,例如上面的這條預處理指令就可以改變當前的行號 為 30,檔名是 a.h。初看起來似乎沒有什麼用,不過,他還是有點用的,那就是用在編譯 器的編寫中,我們知道編譯器對 c 原始碼編譯過程中會產生一些中間檔案,通過這條指令, 可以保證檔名是固定的,不會被這些中間檔案代替,有利於進行分析。

在所有的預處理指令中,#pragma 指令可能是複雜的了,它的作用是設定編譯器的 狀態或者是指示編譯器完成一些特定的動作。#pragma 指令對每個編譯器給出了乙個方法, 在保持與 c 和 c ++語言完全相容的情況下,給出主機或作業系統專有的特徵。依據定義,編譯 指示是機器或作業系統專有的,且對於每個編譯器都是不同的。 其格式一般為:

#pragma para 其中 para 為引數,下面來看一些常用的引數。

#pragma para 其中 para 為引數,下面來看一些常用的引數。

#pragma是編譯器指示字,用於指示編譯器完成一些特定的動作

#pragma所定義的很多指示字是編譯器和作業系統特有的

#pragma在不同的編譯器間是不可移植的

C語言預處理

c語言中編譯預處理的三種形式的命令 巨集定義,檔案包含,條件編譯命令。1 巨集定義主要是 define,undef 如下 define pi 3.1415926 不帶引數的巨集定義 define max a,b a b?a b 帶引數的巨集定義 說明 巨集定義在c語言與c 語言中是相通的。下面舉例說...

C語言預處理

預處理 系統自動自動呼叫預處理程式對程式中 號開頭的預處理部分進行處理,處理完畢後可以進城源程式的編譯階段。預定義 一些預定義符號 常用於除錯 file 正在預編譯的源檔名 line 當前行號 只有這個是整數常量,其他是字串常量 function 當前所在函式名 date 當前日期 time 當前時...

c語言預處理

預處理可以包含 1 巨集定義指令 2 標頭檔案包括指令 3 條件編譯指令 4 編譯程式可以識別的特殊符號 巨集定義 define undef 檔案包含 include 條件編譯 if ifdef else elif endif等 其他 line error program等 注意事項 1 在c語言中...