c是結構化語言,是面向過程的,資料與演算法分開。**它的重點在於演算法和資料結構。側重於計算機底層操作。
c++是物件導向的,注重抽象出問題,建立物件模型。**主要特點是類,封裝和繼承。與c的區別主要為 :類、繼承和多重繼承、運算子過載、類模板、c++標準庫、模板庫。
在很大程度上,c++是c的超集。
具體的區別如下:
在c中,函式原型可以是宣告乙個函式名後接乙個圓括號;而c++的函式原型必須和函式的定義時候的引數保持一致。舉例如下:
#include
intadd()
;int
main
(int argc,
char
*ar**)
intadd
(int a,
int b)
pp
#include//int add();
int add(int,int); //函式原型和函式定義的引數一致才行
int main(int argc,char *ar**)
int add(int a,int b)
c把char常量視為int型別,而c++將其視為char型別。
比如說,char ch = 『a』;
在c中,常量『a』被儲存在int大小的記憶體塊中,更準確的說,字元編碼被儲存在乙個int型別的值,相同的數值也儲存在變數ch中,但是在ch中該值只佔記憶體的1個位元組
在c++中,』a』和ch都只佔乙個位元組。
又如,char ch = 『abcd』;
『abcd』表示乙個4個位元組的int型別值,其中第1個位元組儲存a的字元編碼,第2個位元組儲存b的字元編碼,以此類推。
//c_c++_different.c
#include
void
test()
printf
("%lld\n,"
,num);}
intmain
(int argc,
char
*ar**)
在c中,全域性的const具有外部鏈結;
在c++中,全部的const具有內部鏈結;
即,c++中宣告為:const double pi = 3.14159;
相當於在c中宣告為:static const double pi = 3.14159;
如果const變數是內部鏈結,每個包含該標頭檔案的檔案都會獲得乙份const變數的備份;
如果const變數是外部鏈結,就必須在乙個檔案中進行定義式的宣告,然後在其他檔案中使用關鍵字extern進行引用式宣告
在c++中,可以使用const值來初始化其他const變數,但在c中不能這樣做,
在c語言中,用const型別限定符宣告的式變數,不是常量,用於限定乙個變數為唯讀
//c_c++_different.c
#include
const
int a =1;
const
int b =2;
//const int c = a * b; //c中會報錯
intmain
(int argc,
char
*ar**)
宣告乙個有標記的結構或聯合後,就可以在c++中使用這個標記作為型別名;但在c中,需要struct+標記名才能作為乙個型別名,單單的型別名會被編譯器解釋為變數名。
//c_c++_different.c
#include
struct duo
;int
main
(int argc,
char
*ar**)
c++使用列舉比c嚴格。在c++中,只能把enum賦給enum變數,然後把變數與其他值作比較,不經過顯式強制轉換,不能把int型別值賦給enum變數,而且也不能遞增乙個enum變數。
//c_c++_different.c
#include
intmain
(int argc,
char
*ar**)
;enum sample season;
/* c和c++都可以 */
season = sage;
/* 在c中會發出警告,在c++中會是錯誤 */
season =
(enum sample)3;
/* c和c++都可以 */
season++
;/* c可以,在c++中是乙個錯誤 */
return0;
}
c++可以把任意型別的指標賦給指向void的指標,這點和c一樣。不同的是,c++只有顯式強制型別轉換才能指向void的指標賦給其他型別的指標。
c++可以把派生類物件的位址賦給基類指標,但在c類中沒有這裡涉及的特性。
//c_c++_different.c
#include
intmain
(int argc,
char
*ar**)
;int
*pi;
void
* pv;
pv = ar;
/* c和c++都可以 */
pi = pv;
/* c可以,c++不可以 */
pi =
(int
*) pv;
/* c和c++ 都可以*/
return0;
}
在c++中,布林型別是bool,而且true和false都是關鍵字;
在c中,布林型別是_bool,但是要包含stdbool.h標頭檔案才可以使用bool,true和false
在c++中,可以用or來代替||,還有其他的可選拼寫,它們都是關鍵字。
在c99和c11中,這些可選拼寫都被定義為巨集,要包含iso64.h才能使用它們。
在c++中,complex標頭檔案提供了乙個複數來支援複數型別;
在c中,通過complex.h標頭檔案來支援;
這兩種方法區別不大,但是不相容。
一些只有c99和c11才有的特性:
1)指定初始化器
2)復合初始化器
3)受限指標(即,restric指標)
4)變長陣列
5)伸縮型陣列成員
6)帶可變數量引數的巨集
C 和C的區別
c 與c語言的關係 1 c 繼承了所有的c特性 2 c 在c的基礎上提供了更多更好的語法和特性 3 c 的設計目標是執行效率和開發效率的統一 c 對c語言的加強 1 c 中所有的變數都可以再需要使用時再定義 如 for迴圈等中需要的變數 3 c中可以定義多個同名的全域性變數 c 不可以 4 cons...
C和C 的區別
這裡主要討論的是區別,而不是c 中有的,而c語言中沒有的東西。c 比c語言多了很多東西,最重要的當屬類 物件導向程式設計 和模板 泛型程式設計 基於泛型程式設計還引出了元程式設計 metaprogramming 等等。這裡討 共部分但是不一樣的部分 函式過載是c 支援的,c不支援 c 的函式過載在類...
C 和C的區別
c c 的聯絡 c c 區別 小知識點補充擴充套件 free 而new開闢物件陣列用的是new size 釋放的的時候是 delete 5 返回值問題,malloc開闢成功返回void 需要強轉,失敗返回null,new 成功返回物件指標,失敗丟擲異常 這就可能會提到c 的new handler機 ...