C 修煉篇 01 從C到C 的公升級

2021-08-20 08:36:05 字數 2134 閱讀 5502

引言:本文意在完成一場從c到c++世界的平滑過渡,因此要求讀者應具備一定的c語言基礎功底。

文章嚮導

一、c與c++的關係c與c++的關係並不能簡單地概括為僅多了兩個+號而已,兩者實際上既有區別又有聯絡,且並無所謂的何者好壞之說。簡單說來,c++其實是一種更好的c語言,只不過兩者適用場景並不相同。

由上圖可知,c++繼承了c的所有特性,也就是完全地相容c語言。同時,c++在c的基礎上提供了更多的語法和特性(++的由來:型別加強、函式加強)。c++所要達到的目標是執行效率與開發效率的同一。

二、c++做了哪些公升級?

1.更為強調語言的實用性

int c = 0;

for(int i=1; i<=numoftask; i++)

}printf("c = %d\n", c);

register

int a = 0; //在c中,此處會報錯

printf("&a = %p\n", &a); //在c中,此處會報錯

printf("end...\n");

return

0;}

3.struct關鍵字的加強

/*c語言中的結構體書寫*/

typedef

struct _tag_student student;

struct _tag_student

;/*c++中的結構體書寫*/

struct student

上面展示的為c與c++中的結構體等價寫法,可明顯發現兩者的區別:-c語言中struct定義的識別符號並不是一種新的型別,而c++中的struct卻用於定義一種全新的型別。

4.隱式宣告與函式引數

首先,應該明確的是c++中所有的識別符號都必須顯示宣告型別,即在c++中不應該寫出如下的**:

f()

上面的函式f()在c語言中表示預設返回值為int,且可接收任意多的引數,但在c++中這樣寫是沒法通過編譯的。另外,值得注意的是c++中 int f()和int f(void)具有相同的意義。

5.const關鍵字的公升級

上圖對比了const關鍵字在c語言與c++中的異同之處,為了更好的理解圖中的結論,請看如下兩個示例。

/*test.c*/

#include

int main()

/*test.cpp*/

#include

int main()

這裡主要分析第二個例子,也就是c++中的情形。首先看下完整的執行結果:

從圖中可以明確看到編譯器給const常量c分配了儲存空間,但卻並未使用其儲存空間中的值。要理解這點則需明白之前提及的「符號表(編譯器的一種資料結構)」,c++中定義的const常量,編譯器會將其存入符號表中,當要使用常量時則直接從符號表中取值進行替換,但為了相容c語言可能會為其分配儲存空間,但卻不會使用其中的值。有點繞?那不妨看看下面這張草圖:

notes:實際上還有其他的公升級方面,但這會牽涉到c++獨有的知識點,因此筆者想將其放在後續的內容中來論述。

參閱資料

c++ primer plus(第6版)

狄泰軟體學院-c++深度解析教程

從C到C 的公升級

c 的語言型別 c 是靜態的強型別語言。靜態語言 資料型別在編譯期間檢查,因此在寫程式時需要宣告變數的型別 強型別語言 強調資料型別,不同的資料型別間的轉換需要進行強制型別轉換 1.c 繼承所有c的特性 2.c 在c的基礎上提供的更多的語法和特性 型別加強,函式加強,異常處理 3.c 在c的基礎上增...

C到C 的公升級

c與c 的關係 1.c 繼承了所有的c特性 2.c 在c的基礎上提供了更多的語法和特性 3.c 的設計目標是執行效率與開發效率的統一 c 對c的加強 1.c 中更強調語言的 實用性 所有的變數都可以在需要使用的時候再定義 for int i 0 i 10 i c 編譯器不報錯 注意 c語言中的變數都...

c到c 的公升級

c 繼承了c的所有特性,c 在c的基礎上同時增加了許多新的語法和特性,c 的目標是實現執行效率與開發效率相統一。c 中更加強調語言的實用性,所有變數可在使用的時候再定義。例如 include int main int argc,char argv printf c d n c printf end....