ความแตกต่างที่สำคัญ: C และ C ++ เป็นภาษาโปรแกรมคอมพิวเตอร์สองภาษาที่แตกต่างกัน C ++ ได้รับการพัฒนาจากภาษาซี อย่างไรก็ตามมันมีความแตกต่างในธรรมชาติ ความแตกต่างที่ชัดเจนที่สุดคือ C คือภาษาเชิงโพรซีเดอร์ในขณะที่ C ++ รองรับทั้งการเขียนโปรแกรมเชิงโพรซีเดอร์และเชิงวัตถุดังนั้นจึงมักเรียกว่าภาษาไฮบริด
C เป็นหนึ่งในภาษาการเขียนโปรแกรมที่เก่าแก่ที่สุดและเป็นหนึ่งในภาษาการเขียนโปรแกรมที่ใช้กันอย่างแพร่หลาย มันถูกใช้อย่างต่อเนื่องในแอพพลิเคชั่นที่เคยเขียนโค้ดในภาษาแอสเซมบลี ซึ่งรวมถึงระบบปฏิบัติการคอมพิวเตอร์ UNIX C ยังมีอิทธิพลโดยตรงหรือโดยอ้อมต่อภาษาการเขียนโปรแกรมในภายหลังเช่น C #, D, Go, Java, JavaScript, Limbo, LPC, Perl, PHP, Python และ C เชลล์ของ Unix แม้จะมีภาษาใหม่เหล่านี้ C ยังคงเป็นภาษาการเขียนโปรแกรมยอดนิยม
C ++ เริ่มต้นจากการเพิ่มประสิทธิภาพให้กับ C มันถูกออกแบบมาให้เป็น source-and-link เข้ากันได้กับ C อย่างไรก็ตามมันได้เพิ่มคลาส, ฟังก์ชั่นเสมือนจริง, การโอเวอร์โหลดตัวดำเนินการ, การสืบทอดหลาย ๆ แบบ, การจัดการข้อยกเว้นเป็นต้นในที่สุดก็พัฒนา พอที่จะถือว่าเป็นภาษาโปรแกรมในสิทธิของตนเอง เดิมเป็นที่ยอมรับในปี 1998 เป็นภาษาการเขียนโปรแกรมที่ผ่านการรับรอง ISO / IEC 14882: 1998 วันนี้ C ++ ตอนนี้ใช้กันทั่วไปสำหรับการออกแบบฮาร์ดแวร์
C เป็นภาษาโปรแกรมทั่วไปที่ใช้เซมิโคลอน (;) เป็นเทอร์มิเนเตอร์คำสั่งเช่นเดียวกับเครื่องหมายปีกกา ({}) สำหรับการจัดกลุ่มบล็อกของคำสั่ง มีสิ่งอำนวยความสะดวกสำหรับการเขียนโปรแกรมที่มีโครงสร้างและการออกแบบให้โครงสร้างที่สามารถแมปได้อย่างมีประสิทธิภาพกับคำสั่งเครื่องทั่วไป นอกจากนี้ยังช่วยให้ขอบเขตตัวแปรคำศัพท์และการเรียกซ้ำและมีระบบประเภทคงที่ซึ่งป้องกันการดำเนินงานที่ไม่ได้ตั้งใจจำนวนมาก
อย่างไรก็ตามเมื่อเทียบกับ C ++ C มีข้อ จำกัด มากมาย เนื่องจาก C ไม่ใช่เชิงวัตถุจึงไม่สนับสนุนแนวคิด OOPS C ไม่รองรับการใช้งานฟังก์ชั่นและการใช้งานการบรรทุกเกินพิกัด มันไม่สามารถใช้ฟังก์ชั่นภายในโครงสร้าง ไม่รองรับฟังก์ชันเสมือนและตัวแปรอ้างอิงหรือการจัดการข้อยกเว้น นอกจากนี้ยังไม่รองรับตัวแปรอ้างอิง นอกจากนี้ C ยังไม่มีการห่อหุ้มหรือรักษาความปลอดภัยของข้อมูล ในการเปรียบเทียบ C ++ รองรับคุณสมบัติเหล่านี้ทั้งหมด
ภาษาทั้งสองยังแตกต่างกันในลักษณะที่ฟังก์ชันหน่วยความจำที่อยู่อินพุต - เอาท์พุตและการวางโปรแกรม GUI ตัวอย่างเช่น C ใช้ฟังก์ชัน calloc (), malloc () และ free () สำหรับการจัดสรรและการจัดสรรหน่วยความจำในขณะที่ C ++ ใช้ประโยชน์ใหม่และลบ C ใช้ scanf () และ printf () สำหรับอินพุตและเอาต์พุตขณะที่ C ++ ใช้ cin >> และ cout << โอเปอเรเตอร์ C รองรับเครื่องมือ GTK สำหรับการเขียนโปรแกรม GUI ในขณะที่ C ++ รองรับเครื่องมือ Qt สำหรับการเขียนโปรแกรม GUI ข้อแตกต่างก็คือว่า C ต้องการหนึ่งในการประกาศตัวแปรทั้งหมดที่ด้านบนของโปรแกรมในขณะที่ใน C ++ ตัวแปรสามารถประกาศได้ทุกที่ในโปรแกรม
นอกจากนี้ C ++ มักจะถือว่าง่ายต่อการเรียนรู้เนื่องจากผู้ใช้ที่เป็นมิตรมากกว่า C. C ++ ยังมีฟังก์ชั่นเพิ่มเติมมากมายที่ทำให้การเขียนโปรแกรมง่ายขึ้นโดยเฉพาะอย่างยิ่งสำหรับคนที่ยังใหม่กับกรอบ C อย่างไรก็ตามหลายคนอ้างว่ามันสำคัญจริงๆ ทั้งสองภาษาต่างกันมากจนในความเป็นจริงพวกเขาสามารถเป็นสองภาษาที่แตกต่างกันอย่างอิสระ สิ่งหนึ่งที่ต้องจำไว้คือ C มีโครงสร้างมากกว่า C ++ มากในขณะที่ C ++ ได้รับการออกแบบให้แสดงออกและเป็นนามธรรมมากกว่า C
การเปรียบเทียบระหว่าง C และ C ++:
C | C ++ | |
ก่อตั้งขึ้นเมื่อ | พัฒนาโดย Dennis Ritchie ที่ AT&T Bell Labs ระหว่างปี 1969 ถึง 2516 | พัฒนาโดย Bjarne Stroustrup ที่ Bell Labs เริ่มในปี 2522 |
รหัสแหล่งที่มา | ซอร์สโค้ดโปรแกรมรูปแบบฟรี | พัฒนามาจากภาษาโปรแกรม C |
ภาษา | ขั้นตอนภาษาเชิง | รองรับกระบวนทัศน์การเขียนโปรแกรมทั้งเชิงกระบวนและเชิงวัตถุ ดังนั้นจึงมักเรียกว่าภาษาไฮบริด |
เข้าใกล้ | ทำตามวิธีการจากบนลงล่าง | ทำตามวิธีการจากล่างขึ้นบน |
ความสัมพันธ์ | C เป็นส่วนย่อยของ C ++ มันไม่สามารถเรียกใช้รหัส C ++ | C ++ เป็นชุดของ C ++ สามารถเรียกใช้รหัส C ส่วนใหญ่ได้ในขณะที่ C ไม่สามารถเรียกใช้รหัส C ++ ได้ |
ขับรถ | ภาษาขับเคลื่อนด้วยฟังก์ชั่น | ภาษาขับเคลื่อนด้วยวัตถุ |
โฟกัส | มุ่งเน้นไปที่วิธีการหรือกระบวนการมากกว่าข้อมูล | มุ่งเน้นไปที่ข้อมูลมากกว่าวิธีการหรือขั้นตอน |
การก่อสร้างตึก | ฟังก์ชั่น | วัตถุ |
คำสำคัญ | มีคำค้นหา 32 คำ | มีคำค้นหา 52 คำ |
แนวคิด OOPS | เนื่องจากภาษา 'C' เป็นภาษาเชิงโพรซีเดอร์จึงไม่รองรับแนวคิด OOPS เช่นคลาส, วัตถุ, การสืบทอด, ความหลากหลาย, การซ่อนข้อมูลเป็นต้น | ในฐานะภาษาเชิงวัตถุ C ++ รองรับคลาส, วัตถุ, การซ่อนข้อมูล, ความหลากหลาย, การสืบทอด, สิ่งที่เป็นนามธรรมเป็นต้น |
ฟังก์ชั่น |
|
|
ฟังก์ชั่นหน่วยความจำ | ใช้ฟังก์ชัน calloc (), malloc () และ free () สำหรับการจัดสรรและการจัดสรรหน่วยความจำ | ใช้ตัวดำเนินการใหม่และลบเพื่อจุดประสงค์เดียวกัน |
encapsulation | ไม่รองรับ ข้อมูลและฟังก์ชั่นแยกต่างหากและเอนทิตีฟรี | รองรับการห่อหุ้ม ข้อมูลและฟังก์ชั่นถูกรวมเข้าด้วยกันในรูปแบบของวัตถุ คลาส Objects ให้พิมพ์เขียวของโครงสร้างของวัตถุ |
การซ่อนข้อมูล | C ไม่รองรับการซ่อนข้อมูล ที่นี่ข้อมูลเป็นเอนทิตีฟรีและสามารถจัดการได้โดยรหัสภายนอก | Encapsulation ซ่อนข้อมูลเพื่อให้แน่ใจว่าโครงสร้างข้อมูลและตัวดำเนินการถูกนำไปใช้ตามที่ต้องการ |
ข้อมูล | รองรับชนิดข้อมูลในตัวและดั้งเดิม ข้อมูลไม่ปลอดภัยเนื่องจากไม่ใช่วัตถุ | รองรับทั้งกำหนดชนิดข้อมูลในตัวและผู้ใช้ ข้อมูลมีความปลอดภัย (ซ่อนอยู่) ใน C ++ |
ชั้น | ภาษาระดับต่ำ | ภาษาระดับกลาง |
อินพุท | ภาษา 'C' ใช้ scanf () และ printf () สำหรับอินพุตและเอาต์พุต | ภาษา 'C ++' ใช้ cin >> และ cout << โอเปอเรเตอร์สำหรับอินพุตและเอาต์พุต |
การประกาศตัวแปร | C ต้องการหนึ่งในการประกาศตัวแปรทั้งหมดที่ด้านบนของโปรแกรม | ใน C ++ ตัวแปรสามารถประกาศได้ทุกที่ในโปรแกรมก่อนการใช้งาน |
การประกาศหลายครั้ง | อนุญาตให้มีการประกาศหลายตัวแปรทั่วโลก | ไม่อนุญาตให้ใช้การประกาศหลายตัวแปรทั่วโลก |
การทำแผนที่ | การทำแผนที่ระหว่าง Data และ Function นั้นยากและซับซ้อน | การทำแผนที่ระหว่างข้อมูลและฟังก์ชั่นสามารถใช้งานได้โดยใช้ "วัตถุ" |
การเขียนโปรแกรม GUI | C รองรับเครื่องมือ GTK สำหรับการเขียนโปรแกรม GUI | C ++ รองรับเครื่องมือ Qt สำหรับการเขียนโปรแกรม GUI |
มรดก | ไม่สามารถรับมรดกได้ใน C | การสืบทอดเป็นไปได้ใน C ++ |
นามสกุลไฟล์ | มีนามสกุลไฟล์. c | มีนามสกุลไฟล์. cpp |
ไฟล์ส่วนหัวเริ่มต้น | ไฟล์ส่วนหัวเริ่มต้นที่ใช้ในภาษา C คือ stdio.h | ไฟล์ส่วนหัวเริ่มต้นที่ใช้ใน C ++ คือ iosteam.h |
ตัวอย่างบางส่วนของความแตกต่างระหว่าง C และ C ++:
ตัวอย่าง | C | C ++ |
ประกาศตัวแปร | ที่ด้านบนเท่านั้น: int i; สำหรับ (i = 10; i <10; i ++) | ที่ใดก็ได้ในโปรแกรม: สำหรับ (int i = 10; i <10; i ++) |
การจัดสรรหน่วยความจำ | malloc: int * x = malloc (sizeof (int)); int * x_array = malloc (sizeof (int) * 10); | ใหม่: int * x = new int; int * x_array = new int [10]; |
ปล่อยหน่วยความจำ | ฟรี: ฟรี (x); ฟรี (x_array); | ลบ: ลบ x; ลบ [] x_array; |