2011-11-18 83 views
6

typedefs不是強類型的原因是什麼?有沒有我看不到的好處,還是因爲向後兼容?看到這個例子:爲什麼typedef沒有強類型?

typedef int Velocity; 
void foo(Velocity v) { 
    //do anything; 
} 
int main() { 
    int i=4; 
    foo(i); //Should result in compile error if strongly typed. 
    return 0; 
} 

我沒有要求的解決方法,以獲得強大的類型化的數據類型,但只是想知道爲什麼該標準不要求typedefs是強類型?

謝謝。

+3

因爲C語言是一種想要完成任務的人的語言,而不是那些想要思考抽象類型系統的數學美的人。 (作爲讚賞這兩項活動的人,我不會評判任何一項)。 –

+3

@Stephen佳能:誰說抽象類型系統不能幫助你完成任務?調試意外誤用類型導致的運行時錯誤當然不會算作我書中的事物完成。 –

+0

@MichaelBorgwardt:我當然沒有說他們不能。但是,他們*可能會被濫用。 –

回答

14

因爲C不是強類型和類型定義有其在思考

typedef的起源僅僅是爲了方便和可讀性,它不會創建一個新的類型。

4

typedef只是一個錯誤的(與許多其他關鍵字一樣)。把它想象成typealias

C恰恰相反,對兼容類型是什麼的一個完整的想法。這允許例如將編譯單元鏈接在一起,即使函數原型的聲明只用兼容類型而不是相同的類型來完成。所有這些都來自於日常生活中的簡單實踐必要性,仍然能夠爲實現提供一些保證。

+2

C的主要思想真的不是「這只是一點點,讓我們不要隱藏太多」? –

+1

@MichaelBorgwardt,不,我不這麼認爲。否則,它不會有這種兼容類型的詳細模型。 –

0

即使Velocity是與int不同的類型,但由於類型轉換規則,您的代碼可以編譯並工作得很好。不起作用的是將Velocity *類型的表達式傳遞給期望int *等的函數。如果要實現後一種形式的強制執行,只需使Velocity包含一個包含單個整數的結構或聯合類型,現在您將擁有一個新的真實類型。

相關問題