預處理指令

2021-07-25 03:25:56 字數 2799 閱讀 8465

表現形式:除去空格,以#開頭的**行

作用:就乙個#

/*空指令示例*/

#

即#include預處理指令的作用是在指令處展開被包含的檔案。

包含標頭檔案的格式

分為兩種的目的:為了讓程式設計師區分,也為了讓編譯器套件區分.

1.# include

/*預處理指令示例*/

# include //可以有空格

#include //一般這麼寫

#include "my.h"

/*防止重複包含,標頭檔案應該這麼寫*/

/*my.h*/

#ifndef __my_h_

#define __my_h

……#endif

/*人為指定包含,可以在源**中這麼寫*/

#define __my_h_

#include "my.h"中已經定義了__my_h_,所以不會包含my.h

巨集指令的作用是定義了乙個代表特定內容的識別符號。 作用

定義代表某個值的全域性符號。

定義帶引數的巨集,這樣的巨集可以象函式一樣被呼叫,但它是在呼叫語句處展開巨集,並用呼叫時的實際引數來代替定義中的形式引數。

簡單的拼接字串

拼接整數

/*巨集指令示例*/

//作用1

#define aaa //定義 aaa 為 空

#define bbb "string" //定義 bbb 為 字串"string"

#define ccc 'c' //定義 ccc 為 字元'c'

#define ddd 250 //定義 ddd 為 250

#define eee ddd //可以使用前面已經定義的巨集

//一般aaa被稱為巨集名,一般用全部大寫的識別符號表示

//作用2

#define max(x,y) ((x)>(y)?(x):(y))

//為了安全,一定要在每個包圍加上小括號

//作用3

#define sayhello(n) "hello "#n

//呼叫的時候可以如下使用,可以判斷sayhello(n)返回的是乙個字串

puts(sayhello(xiao huang));//列印結果為 hello xiao huang

puts(sayhello(250));//列印結果為 hello 250

//#後面一定是引數,可以是多個引數,引數並不是c語言中的變數或常量,而是乙個簡單的識別符號

//#後面不能跟字串"hello"

//#後面也不能跟巨集名

//問題:怎麼才能打出乙個 hello 250 hello again 的字串,250所在的位置可以變化?

//作用4

#define num(a,b,c) a##b##c

//呼叫的時候可以如下使用,可以判斷num(a,b,c)返回的是乙個整型常量值

printf("%d ",num(1,2,3));//列印結果為 123

釋放之前定義的識別符號
#define aaa     //定義aaa

#undef aaa //釋放aaa

條件編譯指令將決定那些**被編譯,而哪些是不被編譯的

可以根據表示式的值或者某個特定的巨集是否被定義來確定編譯條件

/*條件編譯指令包括*/

#if#elif

#else

#endif

#ifdef

#ifndef

/*條件編譯指令的使用*/

//if - endif

#if 表示式

...#elif 表示式

...#else

...#endif

//ifdef - endif

#ifdef 巨集名

...#endif

//ifndef - endif

#ifndef 巨集名

...#endif

作用:將使編譯器顯示一條錯誤資訊,然後停止編譯。
/*error.c*/

int main(void) //line 1

在命令列下輸入 gcc error.c ,輸出資訊

error.c: in function 『main』:

error.c:3:2: error: #error "hello"

可以改變編譯器用來指出警告和錯誤資訊的檔案號和行號。
/*line.c*/

int main(int argc, const

char *argv)//line 1

在命令列下輸入gcc line.c ,輸出資訊

line.c: in function 『main』:

line.c:198:2: error: #error hino

作用是設定編譯器的狀態 或 指示編譯器完成一些特定的動作。

pragma指令對每個編譯器給出了乙個方法,在保持與c和c++語言完全相容的情況下,給出主機或作業系統專有的特徵。

依據定義,編譯指示是機器或作業系統專有的,且對於每個編譯器都是不同的。

其格式一般為: #pragma para

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

預處理指令

預處理指令是我們寫在程式 中的給預處理器 preprocessor 的 命令,而不是程式本身的語句。預處理器在我們編譯乙個c 程式時由編譯器自動執行,它負責控制對程式 的第一次驗證和消化。所有這些指令必須寫在單獨的一行中,它們不需要加結尾的分號 在這個教程的開頭我們已經提到了一種預處理指令 defi...

預處理指令

1.人們常常稱機器語言為目標 object code 2.預處理命令 preprocessor directives 三種預處理包括 巨集定義 檔案包含 條件編譯。在對源程式編譯之前,會對程式中的所有預處理指令進行處理。預處理就是在進行編譯的第一遍詞法掃瞄和語法分析之前所作的工作。說白了,就是對原始...

預處理指令

普通 define 巨集名 字串 define my int int define max 10000 帶引數 define 巨集名 形參 字串 define add x,y x y 在大規模的開發過程中,特別是跨平台和系統的軟體裡,條件編譯很重要。include using namespace s...