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

[zt]挺好玩的C語句

Posted on 2007-08-06 17:47 daiybh 閱讀(364) 評論(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>
            久久久久国产精品厨房| 性欧美1819性猛交| 欧美日韩国内自拍| 欧美日韩国产二区| 欧美午夜电影完整版| 欧美新色视频| 国产欧美精品日韩| 激情久久综合| 亚洲精品国产系列| 亚洲尤物在线| 久久精品视频在线看| 牛牛精品成人免费视频| 亚洲人成网站在线观看播放| 亚洲国产精品毛片| 午夜激情综合网| 麻豆久久精品| 国产精品久久久久久久久免费 | 亚洲欧美在线免费| 久久久久久69| 欧美婷婷久久| 在线观看一区视频| 亚洲一品av免费观看| 久久久久久一区| 亚洲狼人综合| 久久精品一区| 国产精品草草| 亚洲精品资源| 久久国产高清| 99国产精品国产精品久久 | 久久人人97超碰精品888| 欧美日韩中文字幕在线视频| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲五月婷婷| 亚洲福利av| 久久精品道一区二区三区| 国产精品白丝av嫩草影院| 亚洲欧洲日本国产| 久久久精品一品道一区| 99天天综合性| 欧美精品网站| 亚洲黄色av一区| 美日韩丰满少妇在线观看| 亚洲伊人伊色伊影伊综合网| 欧美激情一区二区三区蜜桃视频 | 国产欧美在线| 亚洲视频中文| 亚洲精品乱码久久久久久蜜桃91| 久久精品亚洲一区二区三区浴池| 国产精品一区免费观看| 亚洲网址在线| 亚洲精品资源美女情侣酒店| 欧美成人午夜激情| 亚洲欧洲日夜超级视频| 欧美成人中文字幕| 久久夜色精品国产亚洲aⅴ| 国产综合色一区二区三区| 欧美在线一级va免费观看| 亚洲永久免费av| 国产精品免费aⅴ片在线观看| 亚洲尤物在线视频观看| 中文日韩在线| 国产伦精品一区二区三区四区免费| 亚洲视频香蕉人妖| 99精品欧美一区二区三区| 欧美视频在线免费看| 亚洲一区亚洲二区| 99综合在线| 国产欧美日韩综合一区在线播放 | 欧美精品日韩| 亚洲另类自拍| 99在线精品视频在线观看| 欧美日韩精品一区二区三区| 99视频国产精品免费观看| 亚洲精品永久免费| 国产精品成人aaaaa网站| 亚洲欧美国内爽妇网| 亚洲在线播放电影| 国产美女精品| 免费在线成人| 欧美日本韩国在线| 欧美一区二区三区免费视频| 久久国内精品自在自线400部| 亚洲第一精品影视| 妖精成人www高清在线观看| 国产精品美腿一区在线看| 久久亚洲春色中文字幕| 免费在线欧美黄色| 欧美激情国产精品| 性做久久久久久| 久久久午夜精品| 一区二区三区日韩在线观看 | 欧美激情综合在线| 亚洲一区国产| 久久乐国产精品| 亚洲视频axxx| 欧美一级精品大片| 亚洲精品日产精品乱码不卡| 一区二区三区精品| 狠狠久久五月精品中文字幕| 亚洲日韩欧美视频一区| 国产精品一区二区久久国产| 欧美成人情趣视频| 国产精品久久亚洲7777| 欧美电影免费观看高清| 国产精品久久一级| 最新国产成人在线观看| 性色av一区二区三区在线观看| 亚洲激情在线视频| 亚洲愉拍自拍另类高清精品| 亚洲精品欧美日韩| 久久久久国产精品www| 午夜精品久久| 欧美激情1区2区| 麻豆精品网站| 国产欧美日韩在线播放| 日韩一级片网址| 亚洲经典在线看| 久久精品国产欧美激情| 欧美在线观看日本一区| 欧美天堂亚洲电影院在线播放| 欧美成人精精品一区二区频| 国产一区二区在线免费观看| 亚洲一区二区综合| 亚洲综合日韩| 制服丝袜激情欧洲亚洲| 一本大道久久a久久精品综合| 久久在线免费| 美女视频网站黄色亚洲| 国内精品视频在线播放| 亚洲欧美日韩综合aⅴ视频| 亚洲性图久久| 欧美午夜一区二区福利视频| 亚洲视频综合| 欧美精品日韩| 亚洲精品偷拍| 在线视频欧美一区| 欧美视频在线观看视频极品| 日韩一区二区免费看| 亚洲视频在线一区| 国产精品福利在线观看网址| 日韩一区二区精品在线观看| 99精品99| 欧美丝袜一区二区三区| 一区二区三区四区五区视频| 亚洲午夜av在线| 国产精品免费视频xxxx| 午夜精品视频在线观看| 久久gogo国模裸体人体| 国产综合香蕉五月婷在线| 久久精彩视频| 欧美高清视频一区二区| 99在线精品视频| 欧美午夜在线一二页| 亚洲一区中文字幕在线观看| 久久精品国产一区二区三区| 狠狠色伊人亚洲综合成人| 久久久久9999亚洲精品| 欧美大尺度在线| 99国产精品久久久久久久久久| 欧美视频日韩视频| 欧美一级大片在线观看| 免费久久久一本精品久久区| 亚洲久久一区| 国产精品日本一区二区| 久久精品国产精品 | 亚洲欧美日韩天堂一区二区| 国产精品一区久久| 另类综合日韩欧美亚洲| 日韩一级片网址| 久久久91精品| 一本久道久久综合婷婷鲸鱼| 国产日韩欧美高清| 欧美国产欧美亚洲国产日韩mv天天看完整 | 精品1区2区3区4区| 欧美日韩免费精品| 久久精品欧美| 一区二区三区精密机械公司| 免费观看久久久4p| 亚洲欧美在线网| 亚洲精品一区二区三区蜜桃久| 国产精品一二一区| 欧美精品激情在线| 久久精品女人| 亚洲欧美伊人| 一本色道久久综合亚洲精品小说| 六月婷婷一区| 欧美在线免费一级片| 亚洲一区二区三区精品动漫| 亚洲国产欧美日韩另类综合| 国产伦精品一区二区三区高清版| 欧美日韩国产丝袜另类| 免费亚洲婷婷| 久久久一区二区| 欧美一区二区三区在线免费观看| 99热免费精品在线观看| 欧美1区免费| 久久夜色撩人精品| 久久激情网站| 欧美一区二区三区视频| 亚洲小视频在线|