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

road420

導(dǎo)航

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

統(tǒng)計(jì)

常用鏈接

留言簿(2)

隨筆檔案

文章檔案

搜索

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

#pragma 預(yù)處理指令詳解

#pragma 預(yù)處理指令詳解

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

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

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

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

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

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

(3)#pragma once 

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

      
(4)#pragma  hdrstop

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

      
(5)#pragma  resource  "*.dfm"

    表示把*.dfm文件中的資源加入工程。*.dfm中包括窗體  外觀的定義。   

        
(6)#pragma  warning( disable: 4507 34; once: 4385; error: 164 )
 
    等價(jià)于: 
    #pragma  warning( disable: 4507 34 )    //  不顯示4507和34號(hào)警告信息 
    #pragma  warning( once: 4385 )          //  4385號(hào)警告信息僅報(bào)告一次 
    #pragma  warning( error: 164 )          //  把164號(hào)警告信息作為一個(gè)錯(cuò)誤。 

    同時(shí)這個(gè)pragma  warning  也支持如下格式: 
    #pragma  warning( push [, n ] ) 
    #pragma  warning( pop ) 
    這里n代表一個(gè)警告等級(jí)(1---4)。 
    #pragma  warning( push )保存所有警告信息的現(xiàn)有的警告狀態(tài)。 
    #pragma  warning( push, n )保存所有警告信息的現(xiàn)有的警告狀態(tài),并且把全局警告等級(jí)設(shè)定為n。   
    #pragma  warning( pop )向棧中彈出最后一個(gè)警告信息,在入棧和出棧之間所作的一切改動(dòng)取消。例如: 
    #pragma  warning( push ) 
    #pragma  warning( disable: 4705 ) 
    #pragma  warning( disable: 4706 ) 
    #pragma  warning( disable: 4707 ) 
    //....... 
    #pragma  warning(  pop  )   
    在這段代碼的最后,重新保存所有的警告信息(包括4705,4706和4707)。 


(7)#pragma  comment(...) 

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

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

有時(shí),程序中會(huì)有些函數(shù)會(huì)使編譯器發(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ù)會(huì)產(chǎn)生一條有唯一特征碼100的警告信息,如此可暫時(shí)終止該警告。 

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


補(bǔ)充 —— #pragma pack 與 內(nèi)存對(duì)齊問題


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

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

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

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


如何使用c/c++中的對(duì)齊選項(xiàng)

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

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

    要專門針對(duì)某些結(jié)構(gòu)定義使用對(duì)齊選項(xiàng),可以使用#pragma pack編譯指令:


(1) #pragma  pack( [ n ] )

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


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

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

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

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


(3) 棧內(nèi)存對(duì)齊

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

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


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美日韩123| 国产美女精品免费电影| 尤物视频一区二区| 嫩草成人www欧美| 久久久久久久一区二区| 影视先锋久久| 亚洲国产精品久久久久秋霞不卡 | 欧美一站二站| 亚洲欧美国产视频| 好吊色欧美一区二区三区四区| 久久久久久久综合色一本| 久久久久久欧美| 亚洲黄色毛片| 在线一区二区三区四区| 国产精品社区| 免费人成网站在线观看欧美高清 | 亚洲精品视频免费在线观看| 欧美日韩免费观看一区| 性亚洲最疯狂xxxx高清| 欧美伊人久久久久久午夜久久久久 | 久久伊人精品天天| 欧美xx69| 亚洲在线中文字幕| 欧美一区二区三区免费在线看| 精品999在线播放| 最新国产成人在线观看| 国产精品一区免费视频| 久久综合国产精品| 欧美色区777第一页| 久久精品30| 欧美激情第一页xxx| 久久精品一区四区| 欧美激情免费观看| 欧美在线观看网址综合| 欧美成人按摩| 久久精品99| 欧美精品在线网站| 久久亚洲精品伦理| 欧美三区在线视频| 你懂的网址国产 欧美| 欧美色网一区二区| 欧美成人精品福利| 国产精品美女视频网站| 欧美激情一区二区三区在线视频| 国产美女一区二区| 亚洲精品永久免费精品| 娇妻被交换粗又大又硬视频欧美| 亚洲美女毛片| 亚洲国产精品毛片| 欧美制服第一页| 欧美一级大片在线观看| 欧美精品在线网站| 亚洲电影自拍| 黄色工厂这里只有精品| 亚洲在线1234| 亚洲一品av免费观看| 欧美电影免费观看高清完整版| 久久久久久有精品国产| 国产欧美日韩一级| 亚洲一区视频在线| 亚洲欧美亚洲| 国产精品av免费在线观看| 亚洲国产成人在线| 亚洲全部视频| 久久中文字幕导航| 快she精品国产999| 伊人精品视频| 久久激情一区| 免费精品99久久国产综合精品| 国产一区二区成人| 欧美在线视频观看| 久久精品国产久精国产爱| 国产日韩欧美综合一区| 亚洲欧美精品suv| 欧美主播一区二区三区| 国产日韩综合一区二区性色av| 亚洲一级在线| 久久精品免费播放| 韩国v欧美v日本v亚洲v| 久久久久在线观看| 欧美激情乱人伦| 在线视频欧美一区| 国产精品午夜av在线| 久久成人18免费观看| 老司机免费视频一区二区| 在线电影院国产精品| 久久久久久久久蜜桃| 欧美大片第1页| 亚洲美女精品成人在线视频| 欧美精品在线一区| 亚洲尤物视频网| 久久精品女人| 亚洲日韩视频| 欧美日韩免费观看中文| 亚洲一区二区动漫| 久久中文精品| 夜夜嗨av一区二区三区中文字幕| 欧美日韩一区二区精品| 亚洲精品视频一区| 久久久久综合网| 亚洲剧情一区二区| 国产精品毛片在线| 久久久久久夜精品精品免费| 欧美激情按摩| 亚洲欧美日本国产专区一区| 国内精品伊人久久久久av影院| 久久久免费av| 亚洲一区网站| 亚洲第一二三四五区| 欧美一级淫片aaaaaaa视频| 红桃av永久久久| 欧美日韩三级一区二区| 久久成人这里只有精品| 亚洲毛片一区| 牛牛影视久久网| 亚洲一区二区av电影| 亚洲第一精品夜夜躁人人躁| 欧美午夜不卡在线观看免费 | 久久国产精品亚洲va麻豆| 亚洲国产欧美在线人成| 久久久www成人免费无遮挡大片| 亚洲黄色av一区| 国产日韩精品视频一区| 欧美日韩精品系列| 欧美www视频在线观看| 性欧美xxxx大乳国产app| 日韩亚洲欧美综合| 欧美激情影院| 蜜桃av综合| 久久久久久国产精品mv| 一区二区三区四区五区在线| 亚洲国产精品久久人人爱蜜臀| 国产日韩欧美二区| 国产精品久久久久aaaa九色| 欧美韩国日本综合| 欧美va亚洲va香蕉在线| 久久精品最新地址| 午夜精品美女自拍福到在线| 一区二区三区四区五区视频 | 欧美一区不卡| 亚洲线精品一区二区三区八戒| 91久久久久久久久| 亚洲高清免费在线| 一区二区三区亚洲| 国产一区二三区| 韩国av一区二区三区| 国内成人精品一区| 国内精品国产成人| 樱桃成人精品视频在线播放| 激情欧美一区| **欧美日韩vr在线| 亚洲国产三级在线| 亚洲韩国青草视频| 亚洲激情亚洲| 99热这里只有精品8| 一区二区日韩| 亚洲女女女同性video| 亚洲综合大片69999| 欧美在线一二三区| 久久久精品国产免费观看同学 | 亚洲美女精品成人在线视频| 亚洲精品在线视频| 一本色道久久精品| 亚洲专区免费| 久久久久成人精品免费播放动漫| 久久精品人人爽| 欧美大胆a视频| 亚洲精品中文字幕在线观看| 一本色道久久综合亚洲二区三区| 亚洲视频在线观看三级| 久久99在线观看| 蜜乳av另类精品一区二区| 欧美久久电影| 国产精品自拍在线| 在线日韩日本国产亚洲| 一片黄亚洲嫩模| 久久国产精品久久国产精品| 美女爽到呻吟久久久久| 亚洲国产婷婷| 午夜精品999| 免费在线观看日韩欧美| 欧美激情精品久久久久久黑人| 欧美午夜不卡在线观看免费 | 国产精品国产a级| 国产自产女人91一区在线观看| 亚洲狠狠婷婷| 欧美亚洲在线播放| 亚洲国产高清aⅴ视频| 亚洲无人区一区| 狼人天天伊人久久| 国产免费亚洲高清| 亚洲欧洲日本一区二区三区| 欧美一区视频| 亚洲人成人77777线观看| 久久av一区| 国产精品久久久久久久免费软件| 1024国产精品| 久久精品亚洲精品国产欧美kt∨| 亚洲人成亚洲人成在线观看图片| 午夜亚洲视频|