日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
C的動態(tài)類型檢查

這次美國之行的一大收獲就是終于正視了Objective-C而不再只是當它是不順手的工具了。這主要是有機會拜讀了Brad Cox的《Objective-Oriented Programming, an evolutionary approach》。今天就談談它第91頁提到的那個極少C程序員甚至C編譯器作者知道的一個極為餛飩的語法:

 
 
 
  1. struct MYSTRUCT someVariables; 
  2. someVariable = (*((struct MYSTRUCT *)(*)() _msg))(someObject, …); 

C語言是靜態(tài)類型檢查的編譯語言.例如下面程序定義和使用了兩個類型:浮點和定點。

 
 
 
  1. #include  
  2.  
  3. typedef struct { 
  4.     float x, y; 
  5. } FloatingPoint; 
  6.  
  7. typedef struct { 
  8.     int x, y; 
  9.     int scale; 
  10. } FixedPoint; 
  11.  
  12. int main() { 
  13.     FloatingPoint flo; 
  14.     FixedPoint fix; 
  15.     printf("(%f,%f)\n", flo.x, flo.y); 
  16.     printf("(%f, %f)\n", 1.0*fix.x/fix.scale, 1.0*fix.y/fix.scale); 

不同類型間的轉換需要cast,否則編譯時會被警告。后門還是有的,就是void *類型。我們聲明id是此void *類型,加入一個使用它的迷你函數(shù):

 
 
 
  1. typedef void *id; 
  2.  
  3. id thePoint(id thePoint) { 
  4.     return thePoint; 

這樣在main里我們可以使用明確的類型轉換,不會被警告:

 
 
 
  1. id flid = thePoint(&flo); 
  2. printf("(%f,%f)\n", ((FloatingPoint *)flid)->x, ((FloatingPoint *)flid)->y); 

但類型錯了也沒了警示報告:

 
 
 
  1. FloatingPoint *flip = thePoint(&fix); 
  2. printf("(%f,%f)\n", flip->x, flip->y); 

我們試著改寫為間接的函數(shù)指針類型,當然也沒有編譯預警:

 
 
 
  1. id (*thePointPointer)(id); 
  2. thePointPointer = &thePoint; 
  3.  
  4. flip = thePointPointer(&fix); 
  5. printf("(%f,%f)\n", flip->x, flip->y); 

但如果我們加入明確類型,就會看到預期的警示,雖然是有些啰嗦:

 
 
 
  1. FloatingPoint *(*theFloatingPointPointer)(FloatingPoint *); 
  2. theFloatingPointPointer = &thePoint; 
  3.  
  4. flip = theFloatingPointPointer(&fix); 
  5. printf("(%f,%f)\n", flip->x, flip->y); 

但這很容易解決,寫在一行就行了:

 
 
 
  1. FloatingPoint *flop = ((FloatingPoint *(*)(FloatingPoint *))&thePoint)(&fix); 

我想這就是書中提到的意思。Objective-C是超級的C語言,這些餛飩都被精心的包裝成了簡潔的語法。帶類型檢查的動態(tài)語言 —— 我喜歡。

原文鏈接:http://www.ituring.com.cn/article/48062


當前名稱:C的動態(tài)類型檢查
鏈接URL:http://m.5511xx.com/article/dpggepe.html