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

[zt]挺好玩的C語句

Posted on 2007-08-06 17:47 daiybh 閱讀(359) 評論(0)  編輯 收藏 引用 所屬分類: c++

轉自紫羅蘭茶館

我在學習VC,或者在閱讀別人寫的文章的時候,偶爾碰到下面很多有趣的,并且很奇怪的語句,整理起來,以備后忘. 其實有些是不大容易想到的技巧,貼出來權當大伙飯后沒事的小品文,當然不要過多的看重類似的語句學習,而忽略了基礎知識。

一. 奇怪的宏定義
(1) #define for if(0); else for
按照c++標準,for中定義的變量的作用域應該只在for循環中有效,而VC卻不行,比如這樣定義是不對的
for(int i=0;i<90;i++)
{
...;
}

for(int i=0;i<90;i++) //重復定義i變量
{
...;
}

如果加上標題的那句,那么就可以了,就是讓i作用域局限在else中. 這個問題在net中已經得到解決。


二、宏定義怪圈
#define wait_event(wq,condition) \
do{ \
if(condition) \
break; \
__wait_event(wq,condition); \
}while(0)


明明這句話只執行一次,為什么還還用do-while語句呢?

假設有這樣一個宏定義
#define macro(condition) \
if(condition) dosomething();
現在在程序中這樣使用這個宏:
if(temp)
macro(i);
else
doanotherthing();
一切看起來很正常,但是仔細想想。這個宏會展開成:
if(temp)
if(condition) dosomething();
else
doanotherthing();
這時的else不是與第一個if語句匹配,而是錯誤的與第二個if語句進行了匹配,編譯通過了,但是運行的結果一定是錯誤的。為了避免這個錯誤,我們使用do{….}while(0) 把它包裹起來,成為一個獨立的語法單元,從而不會與上下文發生混淆。同時因為絕大多數的編譯器都能夠識別do{…}while(0)這種無用的循環并進行優化,所以使用這種方法也不會導致程序的性能降低。
這個用法在linux源碼中很常見。

三、功能強大的解釋
除了/* */和 //解釋以外,你見過這樣的解釋方法了嗎?
#if(0)
........
#endif

這樣是為了解釋掉某段程序,而不影響其中的/*...*/的作用,便于調試,而/*.....*/是不能嵌套的,編譯會出錯.

四、數組變臉 a[i]和i[a]
在程序里本應該用a[i],但i[a]竟然和a[i]輸出的結果一樣。為什么。今天把問題整理如下:
i[a]是標準語法。"[]"稱為下標運算符,其語法為:
postfix_expression [ expression ]
其中"postfix_expression"和"expression"之中必須有一個是指針類型(或數組),而另一個是整型。
例如下面的程序是完全合法的:
int a[]={0,1,2,3,4};
printf("%d\n",3[a]);
下標運算符參與的表達式在求解時僅僅是做一個變換而已,將"postfix_expression [ expression ]"
改寫為" * ( postfix_expression + expression ) ",因此a[3]和3[a]分別改寫為*(a+3)和*(3+a),
可見二者是完全等價的。但注意不要用i[a]這種形式,因為它不符合日常習慣。
實驗代碼:
#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<<a[f()]<<endl;
cout<<f()[a]<<endl;
return 0;
}

int f()
{
return 4;
}

實驗結果:
4
4
Press any key to continue

五、雙胞胎定義和聲明:int x;x;

這兒是個關于宏的問題,我曾用過ATL的串轉換宏,包括W2A,開始有些東西我還不太明白。為了使用這些宏,必須在函數的開始處用USES_CONVERSION來初始化某些局部變量。用就用吧,但是看看這個宏的定義,它有類似下面的代碼:

// 在atlconv.h文件中
#define USES_CONVERSION \
int _convert; _convert; \
UINT _acp = GetACP(); _acp; \
LPCWSTR _lpw; _lpw; \
LPCSTR _lpa; _lpa

為什么它們用"int x;x;"--這種后面跟著變量的聲明?

很多人都碰到過這個令人困惑的問題,后來發現簡單的答案是:禁止編譯器的警告信息(warning)。如果單獨有一行代碼:
int x;
且從來沒有使用過x,那么編譯器匯報錯"unreferenced local variable:x",意思是未引用過的局部變量x,如果將警告信息的輸出
調到最大。為了避免討厭的警告,USES_CONVERSION引用聲明的變量。

int x; // 聲明
x; // 使用這個變量

在C++之前的時代,程序員有時在C中用函數形參做同樣的事情來避免"unreferenced formal parameter"或其它的深奧費解的編譯錯誤。

void MyFunc(int x, char y)
{
x;
y;

}

當然,現在用下面的代碼可以更有效地完成同樣的事情:

// 參數 x 不是用
void MyFunc(int /* x */)
{

}

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            91久久国产精品91久久性色| 亚洲尤物在线| 日韩视频在线免费观看| 美女久久一区| 亚洲欧美制服中文字幕| 一区二区三区成人| 亚洲激情欧美激情| 免费一区二区三区| 久久久精品一区二区三区| 一个色综合导航| 亚洲日韩视频| 一区福利视频| 亚洲国产婷婷综合在线精品| 在线电影院国产精品| 国产一区二区三区自拍| 久久综合网络一区二区| 中文日韩电影网站| 欧美国产视频日韩| 欧美大学生性色视频| 欧美国产日韩免费| 亚洲国产欧美国产综合一区| 亚洲第一偷拍| 亚洲毛片av在线| 一本色道久久综合亚洲精品高清| 日韩视频三区| 亚洲资源在线观看| 久久精品国产综合| 免费观看久久久4p| 亚洲电影在线看| 一本一本久久| 国模私拍视频一区| 欧美精品在线免费| 欧美午夜大胆人体| 国产女主播视频一区二区| 国产一区二区三区在线观看免费| 亚洲第一精品夜夜躁人人爽| 日韩视频―中文字幕| 亚洲免费视频一区二区| 欧美一区二区免费| 欧美xx视频| 欧美一区亚洲二区| 欧美亚洲免费在线| 免费在线成人| 99re视频这里只有精品| 午夜影院日韩| 欧美久久久久久久久| 国产精品日韩一区| 亚洲国产欧美在线人成| 亚洲一区日本| 性色一区二区三区| 欧美有码视频| 亚洲国产清纯| 欧美一区二区高清| 欧美另类女人| 伊人精品成人久久综合软件| 亚洲视频自拍偷拍| 欧美黄色免费网站| 久久久久久夜| 久久午夜羞羞影院免费观看| 亚洲精品在线一区二区| 久久9热精品视频| 欧美午夜激情视频| 亚洲免费黄色| 欧美一级久久久| 亚洲精品在线免费| 亚洲欧美日本日韩| 国产精品白丝av嫩草影院| 亚洲韩日在线| 蜜桃精品一区二区三区| 欧美一级成年大片在线观看| 欧美午夜理伦三级在线观看| 亚洲日本中文字幕免费在线不卡| 久久精品日韩欧美| 亚洲国产乱码最新视频| 日韩亚洲国产欧美| 欧美国产精品va在线观看| 激情一区二区| 久久精品视频一| 亚洲欧美精品一区| 欧美视频一区| 亚洲天堂黄色| 妖精视频成人观看www| 欧美黄色精品| 国产一区二区三区四区hd| 午夜精品视频| 亚洲一区精品在线| 国产精品一区一区| 999亚洲国产精| 免费亚洲一区| 伊人狠狠色j香婷婷综合| 久久精品一级爱片| 欧美怡红院视频| 国产一区二区剧情av在线| 亚洲伦理在线| 亚洲伦理在线| 国产精品99免视看9| 亚洲欧美在线网| 午夜精品一区二区三区电影天堂| 国产精品视频内| 久久久久久久成人| 久久日韩粉嫩一区二区三区| 亚洲福利在线观看| 久久综合给合| 亚洲二区视频| 欧美视频在线观看一区| 亚洲伊人网站| 久久精品欧美| 亚洲开发第一视频在线播放| 亚洲精品免费在线| 国产精品无码永久免费888| 久久精品国产99国产精品| 久久成人精品无人区| 精品不卡一区| 亚洲国产综合在线| 国产精品无码专区在线观看| 亚洲一区二区三区四区中文 | 久热成人在线视频| 日韩视频一区二区| 亚洲一区二区三区三| 国内成人自拍视频| 亚洲精品视频在线播放| 国产日韩精品久久久| 亚洲国产精品电影| 国产精品久久亚洲7777| 亚洲欧美一级二级三级| 久久久免费精品视频| 一区二区三区欧美视频| 欧美在线播放| 99这里只有精品| 久久福利毛片| 亚洲尤物在线视频观看| 久久久91精品国产一区二区精品| 亚洲欧洲视频| 一区二区三区在线看| 欧美一区二区视频在线| 久久精品30| 国产一区清纯| 久久久久综合| 欧美激情精品久久久久久变态| 精品1区2区3区4区| 久久美女性网| 亚洲国产福利在线| 亚洲精品美女| 欧美激情欧美激情在线五月| 欧美高清视频在线播放| 亚洲三级性片| 欧美日韩在线播放三区| 亚洲午夜久久久久久尤物| 亚洲女性裸体视频| 国产欧美精品一区二区三区介绍| 欧美一区二区免费视频| 欧美1区2区| 亚洲片在线资源| 亚洲欧美一区二区激情| 国产午夜精品理论片a级探花| 午夜视频一区二区| 免费欧美日韩| 一区二区三区国产精品| 国产精品亚洲人在线观看| 欧美伊人久久| 亚洲第一黄网| 亚洲综合欧美| 精品成人一区二区三区| 欧美精品www| 亚洲欧美日韩国产一区二区| 久久男人资源视频| 亚洲精品一区二| 国产欧美日韩三区| 欧美aaaaaaaa牛牛影院| 亚洲一区免费看| 欧美成人一区在线| 午夜精品久久久久影视| 亚洲国产成人久久| 国产精品你懂的在线欣赏| 久久久欧美一区二区| 一卡二卡3卡四卡高清精品视频| 久久精视频免费在线久久完整在线看| 在线电影院国产精品| 国产精品麻豆欧美日韩ww| 久久人人精品| 亚洲欧美日韩在线综合| 亚洲国产日韩一区二区| 久久久亚洲国产美女国产盗摄| 正在播放欧美一区| 亚洲大片在线| 国产精品日日摸夜夜添夜夜av | 亚洲国产精品激情在线观看| 香蕉久久精品日日躁夜夜躁| 亚洲久久一区| 亚洲高清三级视频| 国产一区二区三区无遮挡| 欧美三级欧美一级| 欧美大片免费观看| 久久国产欧美精品| 一区二区欧美激情| 亚洲黄色免费电影| 欧美福利电影网| 免费观看欧美在线视频的网站| 久久不射2019中文字幕| 亚洲一区在线播放|