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語言中...