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

[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>
            久久精品首页| 国产一区二区日韩精品| 一区二区三区四区五区在线 | 久久久一区二区| 欧美怡红院视频一区二区三区| 亚洲深夜福利视频| 亚洲综合色丁香婷婷六月图片| 亚洲特级毛片| 欧美一区二区在线播放| 久久久精品999| 亚洲福利国产精品| 国产精品实拍| 国精品一区二区| 亚洲高清三级视频| 一个色综合av| 久久精品国产91精品亚洲| 另类尿喷潮videofree| 亚洲国产欧洲综合997久久| 亚洲三级性片| 亚洲自啪免费| 欧美激情成人在线视频| 国产精品成人aaaaa网站| 国产一区二区久久精品| 亚洲狼人综合| 午夜亚洲一区| 欧美成人免费在线| 这里是久久伊人| 久久夜色精品亚洲噜噜国产mv| 欧美日韩福利| 激情欧美亚洲| 亚洲欧美国产视频| 亚洲高清网站| 久久av一区二区三区亚洲| 欧美精品一区二区精品网| 国产亚洲a∨片在线观看| 艳妇臀荡乳欲伦亚洲一区| 欧美综合激情网| 亚洲精品在线二区| 久久综合伊人| 国产日韩在线不卡| 亚洲一区国产一区| 亚洲高清不卡在线| 久久久国产午夜精品| 国产精品久久久久一区二区三区共| 亚洲国产91精品在线观看| 久久电影一区| 一区二区三区高清不卡| 欧美国产亚洲视频| 亚洲欧洲日本国产| 欧美大片在线观看| 久久久国产精彩视频美女艺术照福利| 欧美性猛交视频| 一本不卡影院| 亚洲第一二三四五区| 久久久精彩视频| 韩国av一区二区三区| 欧美一区二区三区久久精品| 一二三区精品| 国产精品国产精品| 亚洲免费网址| 亚洲线精品一区二区三区八戒| 欧美日韩精品高清| 亚洲视频免费| 在线视频日韩精品| 国产精品久久久久久亚洲调教| 亚洲最新在线视频| 亚洲日本欧美日韩高观看| 欧美国产精品一区| 国产精品久久久久999| 欧美国产乱视频| 亚洲精品一区二区三区不| 欧美高清自拍一区| 一本久久精品一区二区| 一本大道久久精品懂色aⅴ | 久久岛国电影| 久久精品国产亚洲aⅴ| 国内外成人免费激情在线视频 | 亚洲欧美精品中文字幕在线| 日韩午夜在线视频| 国产精品久久久久毛片软件| 性感少妇一区| 久久不射电影网| 亚洲国产精品久久| 99精品久久| 国产尤物精品| 亚洲精品1234| 国产精品美女诱惑| 久久中文字幕一区| 欧美精品v日韩精品v韩国精品v | 久久精品最新地址| 亚洲精品国产精品久久清纯直播 | 一区二区三区四区五区精品| 中文精品在线| 影音先锋亚洲视频| 亚洲理伦电影| 国产一区视频在线观看免费| 亚洲黑丝在线| 国产亚洲欧洲| 亚洲国产日韩欧美在线99| 国产精品99免费看 | 国产午夜久久| 亚洲高清自拍| 国产女主播一区二区| 欧美国产日韩亚洲一区| 国产九区一区在线| 亚洲娇小video精品| 国产在线观看一区| 在线综合欧美| 亚洲激情在线观看视频免费| 亚洲欧美在线观看| 一本色道久久88精品综合| 久久国产主播精品| 亚洲男女毛片无遮挡| 欧美二区不卡| 免播放器亚洲一区| 国产情侣久久| 这里是久久伊人| 亚洲乱码日产精品bd| 午夜精品福利在线观看| 欧美成年人在线观看| 国产精品入口日韩视频大尺度| 欧美韩日亚洲| 精品福利电影| 欧美一区二区视频免费观看| 亚洲一区二区三区涩| 欧美大香线蕉线伊人久久国产精品| 久久精品国产在热久久 | 性欧美长视频| 亚洲视频欧美在线| 欧美国产精品中文字幕| 欧美成人午夜视频| 在线成人av| 久久婷婷人人澡人人喊人人爽| 久久手机免费观看| 黄色日韩精品| 久久久夜精品| 欧美freesex交免费视频| 精品1区2区| 久久午夜视频| 欧美3dxxxxhd| 亚洲人体大胆视频| 欧美gay视频激情| 欧美成人免费全部观看天天性色| 一区在线免费| 免费不卡视频| 亚洲激情视频在线播放| 日韩视频免费在线| 欧美激情精品久久久久| 亚洲三级免费电影| 亚洲一区二区三区精品在线观看| 欧美性大战久久久久| 亚洲欧美三级在线| 久久男人av资源网站| 亚洲第一色在线| 欧美国产亚洲另类动漫| 亚洲精品影院在线观看| 亚洲欧美精品在线观看| 国产欧美精品va在线观看| 欧美中文字幕视频在线观看| 久久一区国产| 亚洲美女91| 国产精品网站在线| 久久久亚洲影院你懂的| 亚洲精品美女在线观看播放| 亚洲一区二区三区影院| 国产欧美日韩视频在线观看| 久久亚洲影院| 99国产精品视频免费观看一公开 | 午夜一区二区三区在线观看| 久久久久在线观看| 亚洲美女精品成人在线视频| 国产精品久久久久久久久果冻传媒| 午夜一区二区三区在线观看| 欧美激情1区2区3区| 亚洲在线成人精品| 亚洲成人在线| 欧美日韩日本网| 欧美伊人久久| 亚洲美女色禁图| 久久久久久久激情视频| aa级大片欧美| 尤物yw午夜国产精品视频| 欧美日韩在线另类| 国产美女精品| 亚洲免费在线| 亚洲国产精品电影在线观看| 性色一区二区| 亚洲三级电影全部在线观看高清 | 亚洲精品免费一二三区| 国产欧美日韩在线播放| 欧美人与性动交cc0o| 欧美专区第一页| 夜夜嗨av一区二区三区四季av| 美日韩精品视频免费看| 性刺激综合网| 亚洲网站在线| 日韩视频不卡| 亚洲国产婷婷| 亚洲大胆人体视频| 国产亚洲精品一区二区|