預處理命令

2021-04-20 23:28:43 字數 2644 閱讀 2407

# 和 ## 操作符是和#define

巨集使用的. 使用# 使在#後的首個引數返回為乙個帶引號的字串. 例如, 命令

#define to_string( s ) # s
將會使編譯器把以下命令

cout << to_string( hello world! ) << endl;
理解為

cout << "hello world!" << endl;
使用##鏈結##前後的內容. 例如, 命令

#define concatenate( x, y ) x ## y

...int xy = 10;

...

將會使編譯器把

cout << concatenate( x, y ) << endl;
解釋為

cout << xy << endl;
理所當然,將會在標準輸出處顯示'10'.

語法:

#define macro-name replacement-string

#define命令用於把指定的字串替換檔案中的巨集名稱 . 也就是說, #define使編譯器把檔案中每乙個macro-name替換為replacement-string. 替換的字串結束於行末. 這裡是乙個經典的#define應用 (至少是在c中):

#define true 1

#define false 0

...int done = 0;

while( done != true )

#define命令的另外乙個功能就是替換引數,使它 假冒建立函式一樣使用. 如下的**:

#define absolute_value( x ) ( ((x) < 0) ? -(x) : (x) )

...int x = -1;

while( absolute_value( x ) )

當使用複雜的巨集時,最好使用額外的圓括號. 注意在以上的例子中, 變數"x"總是出現在它自己的括號中. 這樣, 它就可以在和0比較,或變成負值(乘以-1)前計算值. 同樣的, 整個巨集也被括號圍繞, 以防止和其它**混淆. 如果你不注意的話, 你可能會被編譯器曲解你的**.

語法:

#error message

#error命令可以簡單的使編譯器在發生錯誤時停止. 當遇到乙個#error時,編譯器會自動輸出行號而無論message的內容. 本命令大多是用於除錯.

這些命令讓編譯器進行簡單的邏輯控制. 當乙個檔案被編譯時, 你可以使用這些命令使某些行保留或者是去處.

#if expression
如果表示式(expression)的值是"真"(true),那麼緊隨該命令的**將會被編譯.

#ifdef macro
如果"macro"已經在乙個#define宣告中定義了, 那麼緊隨該命令的**將會被編譯.

#ifndef macro
如果"macro"未在乙個#define宣告中定義, 那麼緊隨命令的**將會被編譯.

一些小邊注: 命令#elif是"elseif"的一種縮寫,並且他可以想你所意願的一樣工作. 你也可以在乙個#if後插入乙個"defined"或者"!defined"以獲得更多的功能.

這裡是一部分例子:

#ifdef debug

cout << "this is the test version, i=" << i << endl;

#else

cout << "this is the production version!" << endl;

#endif

你應該注意到第二個例子比在你的**中插入多個"cout"進行除錯的方法更簡單.

語法:

#include #include "filename"

本命令包含乙個檔案並在當前位置插入. 兩種語法的主要不同之處是在於,如果filename括在尖括號中,那麼編譯器不知道如何搜尋它. 如果它括在引號中, 那麼編譯器可以簡單的搜尋到檔案. 兩種搜尋的方式是由編譯器決定的,一般尖括號意味著在標準庫目錄中搜尋, 引號就表示在當前目錄中搜尋. the spiffy new 整潔的新c++ #include目錄不需要直接對映到filenames, 至少對於標準庫是這樣. 這就是你有時能夠成功編譯以下命令的原因

#include
語法:

#line line_number "filename"

#line命令是用於更改__line__ 和 __file__變數的值. 檔名是可選的. __line__ 和 __file__ 變數描述被讀取的當前檔案和行. 命令

#line 10 "main.cpp"
更改行號為10,當前檔案改為"main.cpp".

#pragma命令可以讓程式設計者讓編譯器執行某些事. 因為#pragma命令的執行很特殊,不同的編譯器使用有所不同. 乙個選項可以跟蹤程式的執行.

#undef命令取消乙個先前已定義的巨集變數, 譬如乙個用#define定義的變數.

語法:

__line__

__file__

__date__

__time__

_cplusplus

__stdc__

下列引數在不同的編譯器可能會有所不同, 但是一般是可用的:

預處理命令

我們可以在c源程式中插入傳給編譯程式的各中指令,這些指令被稱為預處理器指令,它們擴充了程式設計的環境。現把常用的預處理命令總結如下 1.預處理程式 按照ansi標準的定義,預處理程式應該處理以下指令 if ifdef ifndef else elif endif define undef line ...

預處理命令

ansi c標準規定可以在c源程式中加入一些 預處理命令 來改進程式設計環境,提高程式設計效率。這些預處理指令都是由ansi c統一規定的,但是它並不是c語言本身的組成部分,不能直接對其進行編譯。c語言和其它高階程式語言的乙個重要區別就是可以使用預處理指令和它的預處理功能。預處理是指由預處理程式負責...

預處理命令

1.以 開頭的預處理命令 預處理命令可以控制編譯器在進行編譯鏈結之前,對所寫的 進行一些其他的處理。所謂的預處理就是在編譯之前對程式的處理,所以預處理命令也叫做預編譯命令。符號是預處理命令特有的符號,c語言中凡是出現 的地方一定是預處理命令。編譯器通過 號來將我們寫的程式和預處理命令區分開的。c語言...