pragma 預處理命令

2021-05-04 14:40:07 字數 2813 閱讀 9456

在所有的預處理指令中,

#pragma

指令可能是最複雜的了,它的作用是設定編譯器的狀態或者是指示編譯器完成一些特定的動作。

#pragma

指令對每個編譯器給出了乙個方法

,在保持與c和

c++語言完全相容的情況下

,給出主機或作業系統專有的特徵。依據定義

,編譯指示是機器或作業系統專有的

,且對於每個編譯器都是不同的。

其格式一般為

: #pragma para

其中para

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

(1)message

引數。message

引數是我最喜歡的乙個引數,它能夠在編譯資訊輸出視窗中輸出相應的資訊,這對於源**資訊的控制是非常重要的。其使用方法為:

#pragma message(「

訊息文字

」)當編譯器遇到這條指令時就在編譯輸出視窗中將訊息文字列印出來。

當我們在程式中定義了許多巨集來控制源**版本的時候,我們自己有可能都會忘記有沒有正確的設定這些巨集,此時我們可以用這條指令在編譯的時候就進行檢查。假設我們希望判斷自己有沒有在源**的什麼地方定義了

_x86

這個巨集可以用下面的方法

#ifdef _x86

#pragma message(「_x86 macro activated!」)

#endif

當我們定義了

_x86

這個巨集以後,應用程式在編譯時就會在編譯輸出視窗裡顯示

「_x86 macro activated!」

。我們就不會因為不記得自己定義的一些特定的巨集而抓耳撓腮了

。(2)

另乙個使用得比較多的

pragma

引數是code_seg

。格式如:

#pragma code_seg( ["section-name"[,"section-class"] ] )

它能夠設定程式中函式**存放的**段,當我們開發驅動程式的時候就會使用到它。 在

c++

**中使用

#pragma code_seg()

時,編譯器生成的函式將被放在最後乙個**段或使用

#pragma code_seg()

指定的部分,而不是放在預設的**段或部分。

(3)#pragma once (

比較常用)

只要在標頭檔案的最開始加入這條指令就能夠保證標頭檔案被編譯一次,這條指令實際上在

vc6中就已經有了,但是考慮到相容性並沒有太多的使用它。

(4)#pragma hdrstop

表示預編譯標頭檔案到此為止,後面的標頭檔案不進行預編譯。

bcb可以預編譯標頭檔案以加快鏈結的速度,但如果所有標頭檔案都進行預編譯又可能占太多磁碟空間,所以使用這個選項排除一些標頭檔案。

有時單元之間有依賴關係,比如單元

a依賴單元

b,所以單元

b要先於單元

a編譯。你可以用

#pragma startup

指定編譯優先順序

,如果使用了

#pragma package(smart_init)

,bcb

就會根據優先順序的大小先後編譯

。(5)#pragma resource "*.dfm"

表示把*.dfm

檔案中的資源加入工程。

*.dfm

中包括窗體

外觀的定義。

(6)#pragma warning( disable : 4507 34; once : 4385; error : 164 )

等價於:

#pragma warning(disable:4507 34) //

不顯示4507和34

號警告資訊

#pragma warning(once:4385) // 4385

號警告資訊僅報告一次

#pragma warning(error:164) //

把164

號警告資訊作為乙個錯誤。

同時這個

pragma warning

也支援如下格式:

#pragma warning( push [ ,n ] )

#pragma warning( pop )這裡n

代表乙個警告等級

(1---4)

。#pragma warning( push )

儲存所有警告資訊的現有的警告狀態。

#pragma warning( push, n)

儲存所有警告資訊的現有的警告狀態,並且把全域性警告

等級設定為n。

#pragma warning( pop )

向棧中彈出最後乙個警告資訊,在入棧和出棧之間所作的

一切改動取消。例如:

#pragma warning( push )

#pragma warning( disable : 4705 )

#pragma warning( disable : 4706 )

#pragma warning( disable : 4707 )

//.......

#pragma warning( pop )

在這段**的最後,重新儲存所有的警告資訊(包括

4705

,4706

和4707)。(

7)pragma comment(...)

該指令將乙個注釋記錄放入乙個物件檔案或可執行檔案中。

常用的lib

關鍵字,可以幫我們連入乙個庫檔案。

pragma預處理命令

pragma可以說是c 中最複雜的預處理指令了,下面是最常用的幾個 pragma指令 pragma comment lib,lib 表示鏈結 lib這個庫,和在工程設定裡寫上 lib的效果一樣。pragma comment linker,entry main function 表示指定鏈結器選項 e...

pragma預處理命令

巨集定義 define 巨集定義又稱為巨集代換 巨集替換,簡稱 巨集 不帶引數 格式 define 識別符號 字串其中識別符號就是所謂的符號常量,也稱為 巨集名 例 define pi 3.1415926 把程式中出現的pi全部換成3.1415926說明 帶引數格式 define 巨集名 參數列 字...

pragma 預處理指令

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