C專家程式設計 十六 從C轉換到C

2021-07-24 15:54:58 字數 1096 閱讀 8460

學習c++最好的方式就是從它的ansi c子集開始程式設計。避免使用早期基於cfront的編譯器,它所產生的是c**而不是機器**。把c語言作為一種可移植的機器語言事實上會使鏈結和除錯複雜化,因為cfront把所有的函式名字混合在一起,為引數資訊編寫內部**。名字混合並不可靠,它會帶來可怕的危險,並可能長期存在於c++中。與c++相反,ada對這個問題的處理非常得體,而且它並不使用不正規的實現方法來定義語言的語義。名字混合是一種在不同的檔案之間進行型別檢查時採用的權宜之策,但它暗示你所有的c++**必須用同乙個編譯器編譯,因為名字混合策略在不同的編譯器上可能各不相同。對於c++的復用模型而言,這是乙個巨大的缺陷,因為它有效地防止了二進位制一級的復用。

在c++中存在,但在c語言中卻不存在的限制有:

•在c++中,使用者**不能呼叫main()函式,但在c語言中卻是允許的(不過這種情況極為罕見)。

•完整的函式原型宣告在c++中是必須的,但在c語言中卻沒這麼嚴格。

•在c++中,由typedef定義的名字不能與已有的結構標籤衝突,但在c語言中卻是允 許的(它們分屬不同的名字空間)。

•當void*指標賦值給另乙個型別的指標時,c++規定必須進行強制型別轉換,但在c 語言中卻無必要。

在c++和c語言中含義不一樣的特性:

• c++至少增加了十幾個關鍵字。這些關鍵字在c語言中可以作為識別符號使用,但如果 這樣做了,用c++編譯器編譯這些**時就會產生錯誤資訊。

•在c++中,宣告可以出現在語句可以出現的任何地方。在c語言中的**塊中,所 有的宣告必須出現在所有語句的前面。

•在c++中,乙個內層範圍的結構名將會隱藏外層空間中相同的物件名。在c語言中 則非如此。

•在c++中,字元常量的型別是char,但在c語言中,它們的型別是int。也就是說,在c++中,sizeof(『a』)的結杲是1,而在c語言中,它的值要大一些。

•由於c++增加了新的//注釋符,有時會在兩種語言中產生微妙而怪異的差別。

C專家程式設計

說到c語言,首稱 c程式語言 這是一本入門和進修均可的書籍,值得讀三遍以上,方才有味。進修書籍如 c專家程式設計 是一本c語言較高層次的書,是成為c語言專家的必經之路。我自以為達到了一定的 程度,才開始學習這本書的。人言,c語言是一門藝術,需要多年歷練才能達到較為完善的境界,此言不虛。c語言進修書籍...

C 專家程式設計

2011.9.4 c 專家程式設計 1 容易混淆的 const 關鍵字const 並不能把乙個變數變為常量,它修飾的符號僅表示該符號的值不能被賦值,也就意味著唯讀不可寫,但它並不能防止通過程式內部 甚至外部,其它函式 的方法來修改它。const 最有用支出是用來限定函式的形參,這樣該函式不會修改實參...

c專家程式設計

pag13 關於替代庫函式 標準規定編譯器只有在違反語法規則和約束條件的情況下才能產生錯誤資訊。所有c語言標準標頭檔案中宣告的識別符號均保留,所以不能宣告乙個叫做malloc 的函式,因為在標準標頭檔案裡已經有乙個函式以此為名。但由於這個規定不是約束條件,因此可以違反他。所以可以用自己宣告的函式來替...