• <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>

            [zt]挺好玩的C語句

            Posted on 2007-08-06 17:00 daiybh 閱讀(79) 評(píng)論(0)  編輯 收藏 引用
            轉(zhuǎn)自紫羅蘭茶館(http://blog.vckbase.com/lishengg_blog/) 我在學(xué)習(xí)VC,或者在閱讀別人寫的文章的時(shí)候,偶爾碰到下面很多有趣的,并且很奇怪的語句,整理起來,以備后忘. 其實(shí)有些是不大容易想到的技巧,貼出來權(quán)當(dāng)大伙飯后沒事的小品文,當(dāng)然不要過多的看重類似的語句學(xué)習(xí),而忽略了基礎(chǔ)知識(shí)。 一. 奇怪的宏定義 (1) #define for if(0); else for 按照c++標(biāo)準(zhǔn),for中定義的變量的作用域應(yīng)該只在for循環(huán)中有效,而VC卻不行,比如這樣定義是不對(duì)的 for(int i=0;i<90;i++) { ...; } for(int i=0;i<90;i++) //重復(fù)定義i變量 { ...; } 如果加上標(biāo)題的那句,那么就可以了,就是讓i作用域局限在else中. 這個(gè)問題在net中已經(jīng)得到解決。 二、宏定義怪圈 #define wait_event(wq,condition) \ do{ \ if(condition) \ break; \ __wait_event(wq,condition); \ }while(0) 明明這句話只執(zhí)行一次,為什么還還用do-while語句呢? 假設(shè)有這樣一個(gè)宏定義 #define macro(condition) \ if(condition) dosomething(); 現(xiàn)在在程序中這樣使用這個(gè)宏: if(temp) macro(i); else doanotherthing(); 一切看起來很正常,但是仔細(xì)想想。這個(gè)宏會(huì)展開成: if(temp) if(condition) dosomething(); else doanotherthing(); 這時(shí)的else不是與第一個(gè)if語句匹配,而是錯(cuò)誤的與第二個(gè)if語句進(jìn)行了匹配,編譯通過了,但是運(yùn)行的結(jié)果一定是錯(cuò)誤的。為了避免這個(gè)錯(cuò)誤,我們使用do{….}while(0) 把它包裹起來,成為一個(gè)獨(dú)立的語法單元,從而不會(huì)與上下文發(fā)生混淆。同時(shí)因?yàn)榻^大多數(shù)的編譯器都能夠識(shí)別do{…}while(0)這種無用的循環(huán)并進(jìn)行優(yōu)化,所以使用這種方法也不會(huì)導(dǎo)致程序的性能降低。 這個(gè)用法在linux源碼中很常見。 三、功能強(qiáng)大的解釋 除了/* */和 //解釋以外,你見過這樣的解釋方法了嗎? #if(0) ........ #endif 這樣是為了解釋掉某段程序,而不影響其中的/*...*/的作用,便于調(diào)試,而/*.....*/是不能嵌套的,編譯會(huì)出錯(cuò). 四、數(shù)組變臉 a[i]和i[a] 在程序里本應(yīng)該用a[i],但i[a]竟然和a[i]輸出的結(jié)果一樣。為什么。今天把問題整理如下: i[a]是標(biāo)準(zhǔn)語法。“[]”稱為下標(biāo)運(yùn)算符,其語法為: postfix_expression [ expression ] 其中“postfix_expression”和“expression”之中必須有一個(gè)是指針類型(或數(shù)組),而另一個(gè)是整型。 例如下面的程序是完全合法的: int a[]={0,1,2,3,4}; printf("%d\n",3[a]); 下標(biāo)運(yùn)算符參與的表達(dá)式在求解時(shí)僅僅是做一個(gè)變換而已,將“postfix_expression [ expression ]” 改寫為“ * ( postfix_expression + expression ) ”,因此a[3]和3[a]分別改寫為*(a+3)和*(3+a), 可見二者是完全等價(jià)的。但注意不要用i[a]這種形式,因?yàn)樗环先粘A?xí)慣。 實(shí)驗(yàn)代碼: #include "stdafx.h" #include "iostream.h" int f(); int main(int argc, char* argv[]) { int a[20]={1,2,3,4,5,6,7,8,9}; cout<

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


            国产精品青草久久久久婷婷| 亚洲AV无码久久| 精品久久人人做人人爽综合| 国产农村妇女毛片精品久久| 少妇被又大又粗又爽毛片久久黑人| 国产精品美女久久久久AV福利| 久久香蕉国产线看观看猫咪?v| 人妻无码αv中文字幕久久琪琪布| 亚洲人成精品久久久久| 国产精品久久久久…| 亚洲国产成人精品无码久久久久久综合| 久久久久亚洲AV成人网人人软件 | 久久精品国产免费观看| 成人妇女免费播放久久久| 合区精品久久久中文字幕一区| 日产精品99久久久久久| 日韩中文久久| 久久91综合国产91久久精品| 久久精品青青草原伊人| 精品99久久aaa一级毛片| 久久精品99久久香蕉国产色戒| 久久久久女教师免费一区| …久久精品99久久香蕉国产| 亚洲乱码日产精品a级毛片久久 | 狠狠色丁香久久婷婷综合五月| 久久国产视频99电影| 久久国产乱子伦免费精品| 精品久久亚洲中文无码| 久久九九久精品国产| 精品久久人人做人人爽综合| 久久99精品综合国产首页| 久久久久久国产精品免费无码| 亚洲国产成人乱码精品女人久久久不卡 | 中文字幕无码久久精品青草| 久久精品无码av| 久久国产精品免费一区二区三区| 天天久久狠狠色综合| 蜜桃麻豆www久久| 国产午夜福利精品久久| 久久精品免费大片国产大片| 要久久爱在线免费观看|