除了理念、正規化、對奇技淫巧的渴望、對編譯器的期待等等完全不同類別的區別以外,即使他們相交的部分其實也有些許差別,我來說說具體的幾個比較典型的,就C99 vs C++98而言,很多老規範後面的版本也沒變(之所以不是C98是為了少一個C98必須在函式體開頭宣告所有區域性變數的區別):
其實你自己去用C++寫一個簡單的C語言編譯器前端,這些語法上的小差別就都體會到了。
除了理念、正規化、對奇技淫巧的渴望、對編譯器的期待等等完全不同類別的區別以外,即使他們相交的部分其實也有些許差別,我來說說具體的幾個比較典型的,就C99 vs C++98而言,很多老規範後面的版本也沒變(之所以不是C98是為了少一個C98必須在函式體開頭宣告所有區域性變數的區別):
C++裡全域性變數前面加上const,linkage就預設為static;所以對於C++而言,非const的全域性變數linkage是extern,const全域性變數是static;對C而言,全域性變數總是預設是extern;C中可以先使用一個函式後面才定義,這樣在首先編譯器會自動生成一個宣告,預設為int返回型別;如果你的函式定義不返回int,就有一個隱式的函式型別轉換;而C++不允許未宣告先呼叫;C中void*可以隱式轉換為其他型別的指標譬如int*;C++中不行,必須cast;C中如果不用typedef,宣告struct型別前面要加上struct,而C++中不用加;由於C++的其他語言特性導致的struct的其他區別這裡不論其實你自己去用C++寫一個簡單的C語言編譯器前端,這些語法上的小差別就都體會到了。