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

[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>
            亚洲男人第一av网站| 男人插女人欧美| 欧美一区二区三区免费在线看| 久久人人爽国产| 亚洲一区二区影院| 欧美电影免费观看高清完整版 | 在线精品国产欧美| 欧美一区网站| 亚洲欧美中文字幕| 国产精品美女久久久| 夜夜嗨av一区二区三区中文字幕| 欧美韩国日本综合| 欧美v日韩v国产v| 亚洲黄色免费电影| 欧美 日韩 国产在线| 亚洲一区网站| 国产精品99久久99久久久二8| 欧美日韩色综合| 中文日韩电影网站| 日韩视频专区| 国产精品成人v| 欧美在线一二三四区| 欧美一区二区福利在线| 亚洲美女免费精品视频在线观看| 欧美福利视频一区| 亚洲视频欧美在线| 亚洲午夜国产一区99re久久 | 亚洲欧美在线网| 亚洲天堂男人| 国产日韩欧美精品在线| 久久久九九九九| 久久这里有精品视频| 亚洲日韩欧美一区二区在线| 亚洲激情精品| 欧美日本在线观看| 亚洲一区二区久久| 亚洲欧美影音先锋| 亚洲电影中文字幕| 亚洲经典一区| 国产日本亚洲高清| 美女免费视频一区| 免费久久精品视频| 亚洲免费视频中文字幕| 久久亚洲风情| 99视频热这里只有精品免费| 99精品视频一区二区三区| 国产色产综合色产在线视频| 欧美aⅴ99久久黑人专区| 欧美午夜免费影院| 欧美电影在线观看| 国产乱子伦一区二区三区国色天香| 久久中文字幕一区| 欧美日韩国产欧美日美国产精品| 午夜精品www| 久久综合影视| 亚洲一区二区三区免费视频| 久久久久久夜| 欧美一区二区在线免费播放| 欧美电影在线观看完整版| 欧美一区二区三区免费看| 女仆av观看一区| 久久av一区| 欧美日韩性生活视频| 久久久亚洲人| 欧美日韩一区二区免费在线观看| 久久精品国产清高在天天线| 欧美精品日韩三级| 久久综合九色综合网站| 欧美视频中文一区二区三区在线观看| 久久riav二区三区| 欧美三日本三级少妇三99| 欧美华人在线视频| 国产日韩精品一区二区三区| 日韩视频在线一区| 亚洲国产精品国自产拍av秋霞| 亚洲色诱最新| 亚洲午夜精品视频| 欧美精品久久一区二区| 亚洲精品乱码视频| 久久久久久91香蕉国产| 久久精品国产一区二区三区免费看| 欧美精品激情blacked18| 美女图片一区二区| 国内精品伊人久久久久av一坑 | 国产欧美日韩视频| 99精品国产福利在线观看免费| 国产午夜久久| 欧美一区二视频| 久久天天躁狠狠躁夜夜爽蜜月| 国产女人水真多18毛片18精品视频| 亚洲免费观看在线观看| 亚洲精品国产视频| 欧美精品在线一区| 最新国产精品拍自在线播放| 亚洲黄一区二区三区| 你懂的亚洲视频| 亚洲激情影视| 一区二区免费在线播放| 欧美日韩免费观看一区| 日韩亚洲综合在线| 亚洲综合色自拍一区| 国产精品毛片在线看| 亚洲欧洲av一区二区| 久久久亚洲影院你懂的| 精品不卡视频| 欧美不卡高清| 99亚洲一区二区| 欧美一区二区三区四区在线观看| 国产日韩成人精品| 久久久久综合网| 欧美国产大片| 亚洲午夜精品久久久久久app| 欧美视频在线免费看| 午夜精品福利一区二区蜜股av| 久久久五月婷婷| 亚洲美女视频| 国产精品自拍三区| 麻豆精品视频| av不卡在线看| 久久视频这里只有精品| 亚洲狼人综合| 国产伦精品一区二区三区视频孕妇| 欧美一区国产二区| 91久久国产自产拍夜夜嗨| 亚洲自拍电影| 一色屋精品视频在线观看网站| 欧美激情自拍| 亚洲一区尤物| 亚洲高清自拍| 久久精品一区二区三区不卡牛牛| 亚洲破处大片| 国产一区二区三区在线观看网站| 欧美成人激情在线| 亚洲欧美99| 亚洲国产一区二区精品专区| 性伦欧美刺激片在线观看| 亚洲国产精品久久久| 国产精品丝袜xxxxxxx| 免费在线欧美黄色| 欧美一进一出视频| 99av国产精品欲麻豆| 麻豆av一区二区三区| 亚洲一区图片| 亚洲国产日韩在线一区模特| 国产精品嫩草久久久久| 欧美黑人在线播放| 性欧美大战久久久久久久免费观看| 欧美激情一区在线| 久久精品理论片| 国产日韩欧美日韩大片| 欧美精品久久天天躁| 久久亚洲一区二区三区四区| 亚洲一区二区三区精品在线| 亚洲黄一区二区三区| 玖玖玖免费嫩草在线影院一区| 亚洲视频综合在线| 亚洲激情自拍| 黄色精品在线看| 国产农村妇女毛片精品久久麻豆 | 欧美激情按摩| 久久一区中文字幕| 久久av一区二区三区亚洲| 亚洲一区二区在线免费观看| 91久久国产综合久久91精品网站| 久久久五月婷婷| 久久精品视频网| 欧美在线免费视频| 亚洲欧美视频| 午夜精品福利一区二区三区av| 中文日韩电影网站| 99re6这里只有精品| 亚洲韩国日本中文字幕| 亚洲高清不卡| 亚洲国产精品传媒在线观看 | 亚洲精品一区在线| 最新中文字幕一区二区三区| 影音先锋日韩有码| 一区二区视频免费完整版观看| 国产日韩欧美一区二区三区四区| 国产精品一二三| 国产日韩欧美高清免费| 国产日韩一区二区三区| 国产日产欧美a一级在线| 国产情侣久久| 娇妻被交换粗又大又硬视频欧美| 国产专区欧美专区| 1769国产精品| 亚洲乱码国产乱码精品精天堂| 亚洲美女中文字幕| 亚洲一区二区不卡免费| 欧美一区二区在线看| 久久久久久久久久久久久9999 | 欧美xxxx在线观看| 欧美激情久久久久久| 欧美日韩免费观看一区=区三区| 欧美日韩情趣电影| 国产伦理一区| 亚洲国产美国国产综合一区二区 | 亚洲视屏一区| 性高湖久久久久久久久|