1.#pragma alignment
alignment pragma用于顯示一條目前記憶體對齊(alignment)和枚舉(enum)位元組大小的消息。例如:
W8035: The alignment is 8 bytes, the enum size is 4 bytes
該消息必須在打開編譯器選項“show general messages”或編譯器開關“-wmsg”後才能顯示。
2.#pragma anon_struct
#pragma anon_struct on 允許編譯類中内嵌的匿名結構
#pragma anon_struct off 禁止編譯類中内嵌的匿名結構
例如:
#pragma anon_struct on
struct S
{
int i;
struct // Embedded anonymous struct
{
int j ;
float x ;
};
S() { i = 1; }
};
#pragma anon_struct off
3.#pragma argsused
argsused pragma通常在定義一個函數前使用,用于屏蔽函數參數未使用的警告。例如:
#pragma argsused
int func(int a,int b)
++b;
return b;
}
如果不使用該pragma,編譯器就會報類似“函數參數沒有用到”的警告消息。
4.#pragma checkoption optionstring
checkoption pragma檢查optionstring中包含的選項是否已設定。例如:
#pragma checkoption -a4 –b
如果沒有設定,顯示一個錯誤:E2471: pragma checkoption failed: options are not as expected。
5.#pragma codeseg
#pragma codeseg <seg_name> <"seg_class"> <group>
codeseg pragma用于重命名函數代碼所在的段(segment)、類(class)、組(group)。如果codeseg後沒有任何選項,表示使用預設代碼段。
6.#pragma comment
#pragma comment (comment type, "string")
comment pragma用于将一個comment記錄寫入到輸出檔案。Comment類型可以下列值之一:
exestr 編譯器将string寫入到一個.obj檔案中,最終放置到可執行檔案中。使用檔案搜尋工具可以從可執行檔案中找到該string。
lib 連接配接器将一個string中指定的.lib檔案寫入到一個.obj檔案中。
user 編譯器将string寫入到一個.obj檔案中,但連接配接器忽略,就是說最終string不放置到可執行檔案中。
7.#pragma defineonoption and #pragma undefineonoption
#pragma defineonoption name switch(es)
#pragma undefineonoption name switch(es)
這兩個pragma用于為若幹個指令行開關建立一個别名(name)。除了部分負責輸入的指令行開關(如-I、-L)外,大部分指令開關都可以在這兩個訓示符中使用。
#pragma defineonoption在别名中所有指定開關都已打開的情況下定義name。
#pragma undefineonoption在别名中所有指定開關都已打開的情況下不定義name。
例如,myfile.c檔案包含下列代碼:
#pragma defineonoption OPTIMIZING -O2
#ifdef OPTIMIZING
#pragma message We are optimizing with -O2
#else
#pragma message There are no optimizations turned on
#endif
bcc32 -c myfile.c,輸出是There are no optimizations turned on
bcc32 -c -O2 myfile.c,輸出是We are optimizing with -O2
下面是一個同時使用多個指令行開關的執行個體:
#define SWITCHES_ARE_OFF
#pragma undefineonoption SWITCHES_ARE_OFF -O2 -c -P -C
#ifdef SWITCHES_ARE_OFF
#pragma message At least one of the switches is not turned on
#pragma message All switches are turned on
bcc32 -c myfile.c,輸出是At least one of the switches is not turned on
bcc32 -c -P -O2 -C,輸出是All switches are turned on
8. #pragma exit and #pragma startup
#pragma startup function-name <priority>
#pragma exit function-name <priority>
這兩個pragma分别用于指定在main函數調用前調用和在_exit函數調用前調用的函數。函數定義格式如下:
void func(void);
priority參數數值範圍為64-255,0值級别最高。級别越高,在main函數調用前越早調用,在-exit函數調用前越晚調用。預設級别為100。0-63級别C庫保留使用。
9.#pragma hdrfile
#pragma hdrfile "filename.CSM"
hdrfile pragma用于指定預編譯頭檔案的名稱。前提是必須已啟用預編譯頭檔案功能。
10.#pragma hdrstop
#pragma hdrstop
hdrstop pragma用于終止若幹個頭檔案的預編譯,可有效減少預編譯頭檔案占用的磁盤空間。
凡在源檔案中#pragma hdrstop指令之前被引用的頭檔案都将被預編譯成預編譯頭檔案。假如一個頭檔案同時被多個源檔案引用,那麼生成的預編譯頭檔案同樣可被多個源檔案共享。是以,在工程中#pragma hdrstop指令之前包含通用頭檔案可獲得更好的編譯性能。
例如,一個新應用程式建立後,源檔案“Unit1.cpp”都會包含類似内容:
#include <vcl.h> // common header file
#pragma hdrstop // terminate list here
#include "Unit1.h" // specific header file
#pragma hdrstop指令隻能在源檔案中使用,頭檔案中使用沒有任何效果。
11.#pragma inline
#pragma inline
該指令等同于“-B”指令行選項。.
#pragma inline指令最好放在源檔案的頂部,因為編譯器每次遇到#pragma inline指令都會加上“-B”指令行選項重新編譯該檔案。
12.#pragma intrinsic
#pragma intrinsic [-]function-name
#pragma intrinsic用于重寫控制函數内聯的指令行開關或IDE選項。
内聯一個指定的函數前必須包含該函數的原型。
#pragma intrinsic strcpy
編譯器将在調用strcpy函數的函數内産生strcpy函數實作代碼。
#pragma intrinsic –strcpy
阻止編譯器對strcpy内聯。
13.#pragma link
#pragma link “[path]modulename[.ext]”
該指令指令連接配接器将一個檔案連接配接到可執行檔案中。預設情況下,連接配接器預設在本地路徑下查找modulename檔案,modulename檔案字尾為“.obj”。使用指令行選項“-L”或者path參數指定任意路徑。
14.#pragma message
#pragma message ("text" ["text"["text" ...]])
#pragma message text
#pragma message (text)
使用這三個指令用于在程式代碼中顯示自定義的消息。
第一個指令用于輸出一個消息,其中的宏不被展開。
第二個指令用于輸出一個包含宏的消息,其中的宏将被展開。
第三個指令用于展開并輸出一個已定義的宏。如果宏未被定義,将輸出一個該指令無效的消息。
#ifdef __BORLANDC__
#pragma message you are compiling using version __BORLANDC__ of C++Builder.
#pragma message “sorry,you are not using C++Builder compiler.”
14.#pragma obsolete
#pragma obsolete identifier
凡是在程式代碼中該指令後遇到identifier辨別符,預編譯器将第一時間給出一個警告資訊。警告顯示該辨別符已廢棄。
15.#pragma option
#pragma option options
#pragma option push options
#pragma option pop
#pragma nopushoptwarn
使用#pragma option指令用于在程式代碼中包含指令行選項。#pragma option指令也可以附加push 和 pop參數後使用。
大部分指令行選項都可以作為options參數使用。options參數允許同時包含多個指令行選項。例如:
#pragma option -C
#pragma option -C –A
使用#pragma option push指令可以儲存目前所有的指令行選項。#pragma option pop指令和#pragma option push指令配對使用,用于恢複以前儲存的指令行選項。例如:
#pragma option push
#include <theworld.h>
#include “ystuff.h”
下面的執行個體因push和pop指令未配對使用,将會産生一個空棧警告。
#pragma option pop /* Warning */
通過#pragma warn –nop指令可以關閉這個警告。
有一點必須特别注意,必須保證每個檔案中的#pragma option push和#pragma option pop指令配對使用。如果在檔案結尾和檔案開始時的指令行選項堆棧内容不一緻,将會顯示一個警告:“以前的選項和警告沒有恢複?”。
通過#pragma nopushoptwarn.指令關閉這個警告。
16.#pragma pack
#pragma pack([{push | pop}[,]] [identifier[,]] [n])
#pragma pack(n)指令和#pragma option –an指令的作用是一樣的。n表示編譯器在記憶體中排列資料的位元組對齊方式。
#pragma pack()表示選擇編譯器預設的位元組對齊方式,預設為8位元組。
#pragma pack(n)表示選擇n值作為位元組對齊方式。n可以為1,2,4,8和16。
#pragma pack(push) 表示壓入目前位元組對齊方式。
#pragma pack(push, ident) 表示關聯辨別符ident後壓入目前位元組對齊方式。
#pragma pack(push, n) 表示壓入目前位元組對齊方式,選擇n值作為位元組對齊方式。
#pragma pack(push, ident, n) 表示關聯辨別符ident後壓入目前位元組對齊方式,選擇n值作為位元組對齊方式。
#pragma pack(pop) 表示彈出最後壓入的位元組對齊方式。
#pragma pack(pop, ident) 表示彈出關聯辨別符ident的位元組對齊方式。如果沒有找到該辨別符,選擇預設位元組對齊方式。
#pragma pack(pop,n) 表示彈出n值大小的位元組對齊方式。如果沒有找到比對的内容,選擇預設位元組對齊方式。
#pragma pack(pop, ident,n) 表示彈出關聯辨別符ident的n值大小的位元組對齊方式。如果沒有找到比對的内容,選擇預設位元組對齊方式。
#pragma pop指令必須和#pragma push指令配對使用。