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

  C++博客 :: 首頁 :: 聯(lián)系 ::  :: 管理
  163 Posts :: 4 Stories :: 350 Comments :: 0 Trackbacks

常用鏈接

留言簿(48)

我參與的團(tuán)隊(duì)

搜索

  •  

積分與排名

  • 積分 - 402520
  • 排名 - 59

最新評論

閱讀排行榜

評論排行榜

在所有的預(yù)處理指令中,#pragma 指令可能是最復(fù)雜的了,它的作用是設(shè)定編譯器的狀態(tài)或者是指示編譯器完成一些特定的動作。
#pragma指令對每個編譯器給出了一個方法,在保持與C和C++語言完全兼容的情況下,給出主機(jī)或操作系統(tǒng)專有的特征。
依據(jù)定義,編譯指示是機(jī)器或操作系統(tǒng)專有的,且對于每個編譯器都是不同的。
    其格式一般為: #pragma para
    其中para為參數(shù),下面來看一些常用的參數(shù)。

(1)message 參數(shù)

    message參數(shù)是我最喜歡的一個參數(shù),它能夠在編譯信息輸出窗口中輸出相應(yīng)的信息,
這對于源代碼信息的控制是非常重要的。其使用方法為:
    #pragma message("消息文本")
    當(dāng)編譯器遇到這條指令時就在編譯輸出窗口中將消息文本打印出來。
    當(dāng)我們在程序中定義了許多宏來控制源代碼版本的時候,我們自己有可能都會忘記有沒有正確的設(shè)置這些宏,
此時我們可以用這條指令在編譯的時候就進(jìn)行檢查。假設(shè)我們希望判斷自己有沒有在源代碼的什么地方定義了_X86這個宏,
可以用下面的方法:
    #ifdef _X86
    #pragma message("_X86 macro activated!")
    #endif
    我們定義了_X86這個宏以后,應(yīng)用程序在編譯時就會在編譯輸出窗口里顯示"_86 macro activated!"。
我們就不會因?yàn)椴挥浀米约憾x的一些特定的宏而抓耳撓腮了。
      
(2)另一個使用得比較多的pragma參數(shù)是code_seg

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

(3)#pragma once (比較常用)

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

(4)#pragma hdrstop

    表示預(yù)編譯頭文件到此為止,后面的頭文件不進(jìn)行預(yù)編譯。BCB可以預(yù)編譯頭文件以加快鏈接的速度,
但如果所有頭文件都進(jìn)行預(yù)編譯又可能占太多磁盤空間,所以使用這個選項(xiàng)排除一些頭文件。   
    有時單元之間有依賴關(guān)系,比如單元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號警告信息僅報(bào)告一次
    #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),并且把全局警告等級設(shè)定為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關(guān)鍵字,可以幫我們連入一個庫文件。如:
    #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ù)會產(chǎn)生一條有唯一特征碼100的警告信息,如此可暫時終止該警告。

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

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


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

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

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

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


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

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

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

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

(1) #pragma pack( [ n ] )

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

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

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

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

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

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

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


posted on 2007-12-24 09:40 sdfasdf 閱讀(668) 評論(1)  編輯 收藏 引用 所屬分類: C++

Feedback

# re: pragma預(yù)處理指令詳解 2008-01-04 12:26 FongLuo
有意思  回復(fù)  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲影视在线播放| 亚洲高清影视| 99re66热这里只有精品3直播| 欧美aⅴ99久久黑人专区| 99精品国产在热久久婷婷| 久久精品av麻豆的观看方式| 一区二区高清视频| 久久一区中文字幕| 久久超碰97人人做人人爱| 在线观看欧美黄色| 国内精品久久久久久久97牛牛| 欧美午夜理伦三级在线观看| 欧美激情一区在线观看| 欧美成人精品一区二区| 欧美成年人网站| 欧美女同视频| 国产午夜精品视频免费不卡69堂| 国产欧美亚洲日本| 国内外成人免费激情在线视频网站| 国产区欧美区日韩区| 国产一区二区三区久久精品| 国产丝袜一区二区| 亚洲日韩第九十九页| 99这里有精品| 先锋影音一区二区三区| 免费亚洲婷婷| 亚洲日本成人| 午夜精品视频在线| 欧美成人黑人xx视频免费观看| 欧美精品一区三区在线观看| 国产精品观看| 雨宫琴音一区二区在线| 亚洲黄色av一区| 亚洲欧美视频一区| 欧美高清在线一区二区| 在线一区二区三区四区| 久久综合福利| 国产乱码精品一区二区三区忘忧草| 国产亚洲人成a一在线v站| 久久精品国产视频| 欧美日韩1234| 亚洲国内在线| 欧美freesex8一10精品| 一区二区三区欧美日韩| 欧美激情视频在线播放 | 国产无遮挡一区二区三区毛片日本| 亚洲人人精品| 亚洲激情电影中文字幕| 欧美亚洲一区二区三区| 国产精品乱子久久久久| 一区二区欧美在线| 亚洲清纯自拍| 欧美色网一区二区| 亚洲欧美国产毛片在线| 一区二区三区四区国产| 国产精品天美传媒入口| 性欧美暴力猛交69hd| 午夜精品一区二区三区电影天堂| 国产精品五月天| 欧美一区二区视频观看视频| 亚洲一区二区在| 韩国成人理伦片免费播放| 免费观看日韩av| 欧美不卡激情三级在线观看| 狠狠色狠狠色综合日日91app| 老司机67194精品线观看| 欧美成人第一页| 亚洲欧美日韩精品久久久| 久久久av毛片精品| 亚洲精品日韩精品| 久久精品网址| 欧美国产第一页| 日韩一级不卡| 欧美在线一区二区| 日韩亚洲在线| 美女主播精品视频一二三四| 欧美怡红院视频| 欧美日韩亚洲一区二| 男女av一区三区二区色多| 国产农村妇女精品| 日韩视频永久免费观看| 亚洲精品国产拍免费91在线| 亚洲免费伊人电影在线观看av| 亚洲国产精品va在线观看黑人| 午夜精品久久一牛影视| 亚洲破处大片| 理论片一区二区在线| 另类综合日韩欧美亚洲| 国产视频久久久久久久| 亚洲一区二区免费看| 久久免费视频在线观看| 国产丝袜美腿一区二区三区| 亚洲欧美日韩另类| 久久尤物电影视频在线观看| 国产亚洲亚洲| 欧美激情麻豆| 在线一区二区视频| 久久精品国产在热久久| 国内视频一区| 欧美精品激情| 亚洲欧美一区二区精品久久久| 亚洲欧美日韩精品在线| 国产精品日韩欧美| 久久夜色精品一区| 亚洲二区视频| 久久精品国产成人| 亚洲美女诱惑| 久久网站免费| 中国av一区| 亚洲电影在线| 国产一区二区视频在线观看| 欧美另类变人与禽xxxxx| 久久大香伊蕉在人线观看热2| 亚洲国产精选| 欧美高清视频一区| 久久久国产精品一区| 午夜精品在线| 亚洲欧美福利一区二区| 香蕉尹人综合在线观看| 亚洲欧美日韩综合| 亚洲一区二区三区欧美| 亚洲免费在线观看| 午夜精品视频在线观看| 欧美一区三区三区高中清蜜桃 | 亚洲欧美日韩区| 亚洲深夜av| 欧美在线视频播放| 久久久精品网| 欧美日韩亚洲高清| 国产区亚洲区欧美区| 一区二区三区亚洲| 99视频精品全部免费在线| 亚洲一区不卡| 欧美激情按摩| 亚洲专区免费| 香蕉久久国产| 亚洲精品国产拍免费91在线| 亚洲麻豆一区| 久久久噜久噜久久综合| 国产精品久久久久久久7电影| 国产毛片一区| 99精品黄色片免费大全| 久久精品亚洲精品国产欧美kt∨| 亚洲国产精品va在线看黑人| 亚洲专区一区| 国产精品青草久久| 久久精品视频免费观看| 亚洲欧洲精品一区二区三区不卡| 久久九九有精品国产23| 日韩天堂av| 欧美aⅴ一区二区三区视频| 日韩一级二级三级| 久久一区亚洲| 欧美一区二区视频在线观看2020| 欧美色另类天堂2015| 亚洲综合色自拍一区| 亚欧美中日韩视频| 在线观看一区二区精品视频| 欧美激情久久久久| 欧美日韩一区二区三区在线观看免| 在线视频欧美一区| 亚洲综合精品一区二区| 国产日本欧美一区二区三区在线| 亚洲自啪免费| 国内免费精品永久在线视频| 亚洲六月丁香色婷婷综合久久| 国模吧视频一区| 亚洲综合色丁香婷婷六月图片| 亚洲网站啪啪| 欧美电影在线播放| 亚洲国产精品第一区二区三区| 夜夜精品视频| 性欧美精品高清| 老司机精品久久| 亚洲国产精品成人| 久久久久91| 99亚洲一区二区| 国产九九视频一区二区三区| 久久蜜臀精品av| 一本色道久久88亚洲综合88| 蜜桃av久久久亚洲精品| 亚洲欧美综合v| 亚洲国产精品一区二区www| 国产精品草莓在线免费观看| 久久伊人精品天天| 亚洲欧美激情视频在线观看一区二区三区 | 亚洲一区一卡| 欧美国产91| 久久av资源网站| 99精品福利视频| 在线观看亚洲精品| 国产精品一区二区三区乱码| 欧美激情第五页| 狂野欧美性猛交xxxx巴西| 亚洲欧美日韩区| 亚洲视频日本| 亚洲最新视频在线播放| 亚洲人成免费| 亚洲高清资源综合久久精品| 欧美日韩国产一区精品一区|