成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C的動態類型檢查

開發 開發工具
這次美國之行的一大收獲就是終于正視了Objective-C而不再只是當它是不順手的工具了。這主要是有機會拜讀了Brad Cox的《Objective-Oriented Programming, an evolutionary approach》。

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

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

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

  1. #include <stdio.h> 
  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 *類型,加入一個使用它的迷你函數:

  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); 

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

  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語言,這些餛飩都被精心的包裝成了簡潔的語法。帶類型檢查的動態語言 —— 我喜歡。

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

責任編輯:陳四芳 來源: 圖靈社區
相關推薦

2009-02-03 09:33:26

動態類型動態編程C# 4.0

2023-01-05 08:09:27

GroovyDSL?

2011-08-22 09:34:50

Objective-C多態動態類型

2021-06-09 07:55:19

Typescript類型檢查

2009-08-12 16:01:32

C#動態改變數據

2009-07-02 10:07:24

C# 4.0的動態類型Visual Stud

2023-01-06 08:06:52

Groovy類型擴展

2022-12-30 08:08:30

2010-01-28 13:45:06

C++數組

2019-08-12 11:40:48

數據庫SQLite3數據類型

2013-12-23 09:48:43

C++鎖定模式

2015-04-02 16:23:50

C++內存泄露檢查

2021-06-05 21:30:24

typescriptOverride檢查

2009-08-27 16:39:26

C# String類型

2009-09-17 18:07:22

C#動態數組

2009-09-02 11:02:57

C#動態數組

2014-11-25 10:18:17

Objective-C

2009-09-02 10:58:02

C#動態數組

2010-01-28 16:31:54

C++類型

2024-04-12 12:36:06

JSJavaScrip方式
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产黄色在线 | 久草在线 | 国产精品免费在线 | 成人 在线| 激情婷婷 | 国产三级一区二区 | 韩日在线视频 | 国产精品一区一区三区 | 性一交一乱一透一a级 | 国产在线视频一区二区 | 成人av电影免费在线观看 | 亚洲人成人一区二区在线观看 | 亚洲精品乱码8久久久久久日本 | 亚洲成人毛片 | 久久久www成人免费精品张筱雨 | 97精品国产97久久久久久免费 | 精品一区av | 欧美成人免费在线视频 | 三级国产三级在线 | 日韩中文字幕一区 | 色综合天天天天做夜夜夜夜做 | 91视频国产一区 | 欧美日韩精品久久久免费观看 | 激情五月婷婷丁香 | 天天射天天干 | 91.com在线观看 | 毛片站| 污片在线免费观看 | 伊人成人免费视频 | 在线日韩视频 | 91精品国产综合久久精品 | 日韩在线视频一区二区三区 | 亚洲欧美激情国产综合久久久 | 国产一区二区久久 | 成人亚洲网站 | 欧美一级片在线观看 | 久久久久国产一区二区三区 | 综合久久亚洲 | 亚洲精品一区二区冲田杏梨 | 久久久久一区二区 | 97久久国产 |