青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

road420

導航

<2008年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

統(tǒng)計

常用鏈接

留言簿(2)

隨筆檔案

文章檔案

搜索

最新評論

閱讀排行榜

評論排行榜

#pragma 預處理指令詳解

#pragma 預處理指令詳解

在所有的預處理指令中,#pragma 指令的作用是設定編譯器的狀態(tài)或者是指示編譯器完成一些特定的動作。

依據(jù)定義,編譯指示是機器或操作系統(tǒng)專有的,且對于每個編譯器都是不同的。 
    其格式一般為: #pragma  para 
    其中para為參數(shù),下面來看一些常用的參數(shù)。 
 

(1)message 信息參數(shù)

    #pragma  message("消息文本") 
    當編譯器遇到這條指令時就在編譯輸出窗口中將消息文本打印出來。 
判斷自己有沒有在源代碼的什么地方定義了_X86這個宏,可以用下面的方法:
    #ifdef  _X86 
    #pragma  message("_X86  macro  activated!") 
    #endif  
    定義了_X86這個宏以后,應用程序在編譯時就會在編譯輸出窗口里顯示"_86  macro  activated!"。  
      

(2)code_seg代碼段參數(shù)

    #pragma  code_seg( ["section-name" [, "section-class"] ] ) 
    它能夠設置程序中函數(shù)代碼存放的代碼段,當我們開發(fā)驅動程序的時候就會使用到它。 
 

(3)#pragma once 

    只要在頭文件的最開始加入這條指令就能夠保證頭文件被編譯一次,這條指令實際上在VC6中就已經(jīng)有了,
但是考慮到兼容性并沒有太多的使用它。 

      
(4)#pragma  hdrstop

    表示預編譯頭文件到此為止,后面的頭文件不進行預編譯。BCB可以預編譯頭文件以加快鏈接的速度,
但如果所有頭文件都進行預編譯又可能占太多磁盤空間,所以使用這個選項排除一些頭文件。   
    有時單元之間有依賴關系,比如單元A依賴單元B,所以單元B要先于單元A編譯。
你可以用#pragma  startup指定編譯優(yōu)先級,如果使用了#pragma  package(smart_init),
BCB就會根據(jù)優(yōu)先級的大小先后編譯。   

      
(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 )保存所有警告信息的現(xiàn)有的警告狀態(tài)。 
    #pragma  warning( push, n )保存所有警告信息的現(xiàn)有的警告狀態(tài),并且把全局警告等級設定為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(...) 

    該指令將一個注釋記錄放入一個對象文件或可執(zhí)行文件中。 
常用的lib關鍵字,可以幫我們連入一個庫文件。如:
    #pragma  comment(lib, "comctl32.lib")
    #pragma  comment(lib, "vfw32.lib")
    #pragma  comment(lib, "wsock32.lib")
 
   
每個編譯程序可以用#pragma指令激活或終止該編譯程序支持的一些編譯功能。

例如,對循環(huán)優(yōu)化功能: 
#pragma  loop_opt(on)     //  激活 
#pragma  loop_opt(off)    //  終止 

有時,程序中會有些函數(shù)會使編譯器發(fā)出你熟知而想忽略的警告,
如“Parameter  xxx  is  never  used  in  function  xxx”,可以這樣: 
#pragma  warn  —100         //  Turn  off  the  warning  message  for  warning  #100 
int  insert_record(REC  *r) 
{  /*  function  body  */  } 
#pragma  warn  +100          //  Turn  the  warning  message  for  warning  #100  back  on 
函數(shù)會產生一條有唯一特征碼100的警告信息,如此可暫時終止該警告。 

每個編譯器對#pragma的實現(xiàn)不同,在一個編譯器中有效在別的編譯器中幾乎無效。可從編譯器的文檔中查看。


補充 —— #pragma pack 與 內存對齊問題


    許多實際的計算機系統(tǒng)對基本類型數(shù)據(jù)在內存中存放的位置有限制,它們會要求這些數(shù)據(jù)的首地址的值是某個數(shù)k
(通常它為4或8)的倍數(shù),這就是所謂的內存對齊,而這個k則被稱為該數(shù)據(jù)類型的對齊模數(shù)(alignment modulus)。

    Win32平臺下的微軟C編譯器(cl.exe for 80x86)在默認情況下采用如下的對齊規(guī)則:
    任何基本數(shù)據(jù)類型T的對齊模數(shù)就是T的大小,即sizeof(T)。比如對于double類型(8字節(jié)),
就要求該類型數(shù)據(jù)的地址總是8的倍數(shù),而char類型數(shù)據(jù)(1字節(jié))則可以從任何一個地址開始。

    Linux下的GCC奉行的是另外一套規(guī)則(在資料中查得,并未驗證,如錯誤請指正):
    任何2字節(jié)大小(包括單字節(jié)嗎?)的數(shù)據(jù)類型(比如short)的對齊模數(shù)是2,而其它所有超過2字節(jié)的數(shù)據(jù)類型
(比如long,double)都以4為對齊模數(shù)。

    ANSI C規(guī)定一種結構類型的大小是它所有字段的大小以及字段之間或字段尾部的填充區(qū)大小之和。
填充區(qū)就是為了使結構體字段滿足內存對齊要求而額外分配給結構體的空間。那么結構體本身有什么對齊要求嗎?
有的,ANSI C標準規(guī)定結構體類型的對齊要求不能比它所有字段中要求最嚴格的那個寬松,可以更嚴格。


如何使用c/c++中的對齊選項

    vc6中的編譯選項有 /Zp[1|2|4|8|16] ,/Zp1表示以1字節(jié)邊界對齊,相應的,/Zpn表示以n字節(jié)邊界對齊。
n字節(jié)邊界對齊的意思是說,一個成員的地址必須安排在成員的尺寸的整數(shù)倍地址上或者是n的整數(shù)倍地址上,取它們中的最小值。
也就是:
    min ( sizeof ( member ),  n)

    實際上,1字節(jié)邊界對齊也就表示了結構成員之間沒有空洞。
    /Zpn選項是應用于整個工程的,影響所有的參與編譯的結構。
    要使用這個選項,可以在vc6中打開工程屬性頁,c/c++頁,選擇Code Generation分類,在Struct member alignment可以選擇。

    要專門針對某些結構定義使用對齊選項,可以使用#pragma pack編譯指令:


(1) #pragma  pack( [ n ] )

    該指令指定結構和聯(lián)合成員的緊湊對齊。而一個完整的轉換單元的結構和聯(lián)合的緊湊對齊由/Zp 選項設置。
緊湊對齊用pack編譯指示在數(shù)據(jù)說明層設置。該編譯指示在其出現(xiàn)后的第一個結構或聯(lián)合說明處生效。
該編譯指示對定義無效。
    當你使用#pragma  pack ( n ) 時, 這里n 為1、2、4、8 或16。
    第一個結構成員之后的每個結構成員都被存儲在更小的成員類型或n 字節(jié)界限內。
如果你使用無參量的#pragma  pack, 結構成員被緊湊為以/Zp 指定的值。該缺省/Zp 緊湊值為/Zp8 。


(2) 編譯器也支持以下增強型語法:
    #pragma  pack( [ [ { push | pop } , ] [ identifier, ] ] [ n] )

    若不同的組件使用pack編譯指示指定不同的緊湊對齊, 這個語法允許你把程序組件組合為一個單獨的轉換單元。
帶push參量的pack編譯指示的每次出現(xiàn)將當前的緊湊對齊存儲到一個內部編譯器堆棧中。
    編譯指示的參量表從左到右讀取。如果你使用push, 則當前緊湊值被存儲起來;
如果你給出一個n 的值, 該值將成為新的緊湊值。若你指定一個標識符, 即你選定一個名稱,
則該標識符將和這個新的的緊湊值聯(lián)系起來。

    帶一個pop參量的pack編譯指示的每次出現(xiàn)都會檢索內部編譯器堆棧頂?shù)闹?并且使該值為新的緊湊對齊值。
如果你使用pop參量且內部編譯器堆棧是空的,則緊湊值為命令行給定的值, 并且將產生一個警告信息。
若你使用pop且指定一個n的值, 該值將成為新的緊湊值。若你使用p o p 且指定一個標識符,
所有存儲在堆棧中的值將從棧中刪除, 直到找到一個匹配的標識符, 這個與標識符相關的緊湊值也從棧中移出,
并且這個僅在標識符入棧之前存在的緊湊值成為新的緊湊值。如果未找到匹配的標識符,
將使用命令行設置的緊湊值, 并且將產生一個一級警告。缺省緊湊對齊為8 。

   pack編譯指示的新的增強功能讓你編寫頭文件, 確保在遇到該頭文件的前后的
緊湊值是一樣的。


(3) 棧內存對齊

    在vc6中棧的對齊方式不受結構成員對齊選項的影響。它總是保持對齊,而且對齊在4字節(jié)邊界上。

posted on 2009-10-23 08:56 深邃者 閱讀(111) 評論(0)  編輯 收藏 引用

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久国产精品72免费观看| 欧美日韩综合精品| 亚洲人在线视频| 久久人人爽人人爽爽久久| 国产精品99久久久久久宅男| 欧美成年人视频网站| 久久精品国产96久久久香蕉| 久久精品国产一区二区三区| 久久亚洲精品一区| 男男成人高潮片免费网站| 欧美大香线蕉线伊人久久国产精品| 免费在线观看成人av| 91久久在线视频| 欧美专区日韩专区| 久久精品国产亚洲一区二区| 久久精品国产久精国产思思| 久久久久久久网站| 亚洲人成在线观看| 亚洲一区尤物| 久久日韩粉嫩一区二区三区| 欧美日韩成人在线播放| 国产精品久久二区二区| 在线看一区二区| 一区二区三区欧美在线观看| 久久国产毛片| 亚洲国产专区| 一本色道久久精品| 欧美一区亚洲二区| 欧美高清自拍一区| 国产日韩欧美自拍| 日韩写真视频在线观看| 欧美一区二区三区视频| 亚洲成在线观看| 亚洲欧美激情诱惑| 欧美精品99| 影音先锋一区| 亚洲欧美在线免费| 亚洲区欧美区| 卡一卡二国产精品| 国产在线观看91精品一区| 一区二区三区**美女毛片| 美女免费视频一区| 午夜日韩av| 国产精品qvod| 亚洲在线黄色| 蜜臀av性久久久久蜜臀aⅴ四虎 | 国产精品v欧美精品v日本精品动漫 | 亚洲欧洲精品一区| 午夜精品国产| 国产精品女人网站| 一本不卡影院| 亚洲黄色免费电影| 久久久精品网| 国产视频一区二区在线观看| 亚洲一区二区三区精品视频| 亚洲欧洲一区二区在线观看| 久久久久久久波多野高潮日日| 国产精品一区在线观看你懂的| 一本久道综合久久精品| 亚洲国产精品免费| 欧美激情按摩在线| 日韩一级免费| 99精品欧美一区| 国产精品videossex久久发布| 亚洲视屏在线播放| 欧美在线欧美在线| 亚洲毛片在线观看.| 久久久国产成人精品| 亚洲一区二区黄色| 国产精品日本| 欧美伊人影院| 亚洲欧美www| 国产欧美日韩精品a在线观看| 亚洲综合导航| 午夜伦欧美伦电影理论片| 国产视频一区免费看| 免费成人av| 欧美高清视频在线播放| 一区二区三区成人| 亚洲在线电影| 在线观看视频一区二区欧美日韩| 欧美不卡视频一区| 欧美日韩精品免费看| 亚洲在线国产日韩欧美| 欧美中在线观看| 亚洲精选大片| 亚洲男同1069视频| 亚洲成色www8888| 亚洲精品视频在线观看免费| 国产精品久久久久久久久搜平片| 欧美在线视频日韩| 两个人的视频www国产精品| 日韩亚洲不卡在线| 亚洲欧美国产日韩中文字幕| 在线免费日韩片| 日韩一区二区高清| 浪潮色综合久久天堂| 99re66热这里只有精品3直播| 欧美二区视频| 亚洲欧美日韩国产中文在线| 欧美一区二区三区在线看| 亚洲福利视频三区| 一本色道综合亚洲| 欧美aⅴ一区二区三区视频| 欧美韩国日本综合| 欧美精品国产一区二区| 午夜精品久久| 久久久久国产精品麻豆ai换脸| 亚洲国产精品嫩草影院| aaa亚洲精品一二三区| 好吊色欧美一区二区三区四区| 亚洲国产中文字幕在线观看| 国产欧美一区视频| 亚洲国产精品一区二区第一页 | 久久国产精品亚洲77777| 一本色道久久综合精品竹菊| 亚洲欧美制服中文字幕| 亚洲经典自拍| 久久精品最新地址| 在线亚洲成人| 欧美国产91| 欧美成人一区二区三区片免费| 国产精品色午夜在线观看| 女人香蕉久久**毛片精品| 国产欧美视频一区二区| 中文亚洲免费| 日韩一级在线观看| 卡一卡二国产精品| 欧美成人午夜免费视在线看片| 国产啪精品视频| 欧美国产一区二区在线观看| 你懂的一区二区| 欧美诱惑福利视频| 欧美日韩免费观看一区| 欧美成在线观看| 亚洲第一页中文字幕| 欧美一区视频在线| 香蕉av777xxx色综合一区| 欧美日韩亚洲不卡| 亚洲精品裸体| 一区二区三区日韩欧美| 欧美激情一区在线观看| 亚洲国产精品一区二区三区| 在线观看日韩精品| 六十路精品视频| 亚洲国内精品在线| 一区二区三区四区五区精品视频 | 美女91精品| 亚洲一级黄色片| 欧美日韩国产色综合一二三四| 亚洲精品乱码久久久久久久久 | 欧美aa在线视频| 在线免费观看欧美| 久久综合九色综合久99| 欧美成人一区二区三区在线观看| 亚洲高清在线观看一区| 欧美激情国产精品| 国产精品99久久久久久宅男 | 免费亚洲视频| 国产一区二区三区免费不卡| 久久国产日韩| 欧美a级大片| 亚洲精品日本| 欧美日韩国产综合一区二区| 亚洲一区久久| 久久先锋影音av| 亚洲精品在线电影| 国产精品你懂的在线| 久久久久成人精品| 亚洲乱码一区二区| 久久精品国产99| 亚洲美女中出| 国产模特精品视频久久久久| 麻豆九一精品爱看视频在线观看免费| 亚洲精品乱码久久久久久久久| 性久久久久久| 亚洲精品久久久一区二区三区| 国产精品国产自产拍高清av王其 | 亚洲第一精品夜夜躁人人躁| 欧美女主播在线| 欧美诱惑福利视频| 久久精品国产亚洲高清剧情介绍| 免播放器亚洲一区| 亚洲日本中文| 国产亚洲精品自拍| 欧美日本在线| 久久久国产成人精品| 99在线视频精品| 欧美激情第10页| 久久久国产91| 午夜一级久久| 亚洲一区二区三区精品在线| 激情文学一区| 国产精自产拍久久久久久| 欧美久久在线| 欧美成人免费va影院高清| 欧美在线播放高清精品| 亚洲综合999| 一区二区三区产品免费精品久久75| 欧美激情精品久久久六区热门 |