C vs. C ++
- 1687
- 23
- Isaac Veum DDS
Ini adalah perbandingan obyektif dari aplikasi, penggunaan dan karakteristik bahasa C Dan C++. Asal dan lintasan pengembangan dari dua bahasa pemrograman juga dibahas.
Grafik perbandingan
Perbedaan - Persamaan -C | C++ | |
---|---|---|
|
| |
Dirancang oleh | Dennis Ritchie | Bjarne Strousttrup |
Koleksi sampah | Manual; memungkinkan manajemen memori yang lebih baik. | Tidak ada GC yang tersedia di Perpustakaan Standar C ++ (STD). Namun, STD memberikan cara yang efisien dan deterministik untuk mengelola sumber daya seperti kepemilikan objek dan penghitungan referensi. |
Dipengaruhi oleh | B (BCPL, CPL), Algol 68, perakitan | C, Simula, Ada 83, Algol 68, Clu, ML |
Muncul di | 1972 | 1985 |
Kelas | Menggunakan struktur sebagai gantinya, dan karenanya memberikan lebih banyak kebebasan untuk menggunakan elemen desain internal | kelas dan struct |
OOP (pemrograman berorientasi objek) | Tidak dibangun; kebebasan untuk mengatur struktur untuk bertindak seperti objek. Tidak memiliki kemampuan untuk mendeklarasikan enkapsulasi. | Bawaan; Ukuran dan tata letak memori objek bersifat deterministik. Panggilan fungsi virtual dapat dilakukan tanpa vtable melalui CRTP. |
Implementasi utama | GCC, MSVC, Borland C, Watcom C | Koleksi Kompiler GNU, Microsoft Visual C ++, Borland C ++ Builder, Intel C ++ Compiler, LLVM/Clang |
Mengetik disiplin | Statis, lemah | Statis, kuat, tidak aman, nominatif |
Memblokir pembatas komentar | /* Dan */ | /* Dan */ |
Pernyataan Terminator | ; | ; |
Pembatas komentar inline | // | // |
Terpengaruh | AWK, CSH, C ++, C#, Objective-C, BITC, D, C Concurrent, Java, JavaScript, Limbo, Perl, PHP | ADA 95, C#, Java, PHP, D, Aikido |
Ekstensi nama file biasa | .C | .CC, .CPP, .cxx, .H, .HH, .hpp |
Paradigma | Bahasa Implementasi Sistem Imperatif (Prosedural) | Multi-paradigma, berorientasi objek, generik, prosedural, fungsional, meta |
Array berukuran dinamis | TIDAK | TIDAK |
Platform | Hampir apapun di planet ini; membutuhkan kompilasi | Hampir semua hal, termasuk platform berbasis OS dan non-OS |
Kecepatan | Aplikasi C lebih cepat untuk dikompilasi dan dieksekusi daripada aplikasi C ++ | +-5% bila dibandingkan dengan C jika Anda tahu cara memanfaatkan C yang baik++. Kinerja program C ++ dan C sering kali sama, karena kompiler untuk kedua bahasa sudah matang. |
Aliran eksekusi | Atas ke bawah | Atas ke bawah |
Pemrograman-termasuk | #termasuk | #termasuk |
Tipe pemrograman-string | Tidak ada tipe string asli; sering dinyatakan sebagai serangkaian karakter | Array, std :: string |
Input /output pemrograman | scanf untuk input; printf untuk output | iostream, fStream (std :: cin, std :: cout) |
Kode | Disusun ke file biner yang dapat dieksekusi asli menggunakan kompiler seperti BCC. | Dikumpulkan ke file yang dapat dieksekusi biner asli |
Jenis bahasa | Bahasa berorientasi prosedural | Bahasa berorientasi objek multi-paradigma |
Dikembangkan oleh | Dennis Ritchie & Bell Labs | Bjarne Strousttrup |
Berorientasi pada objek | Tidak secara asli | Ya |
Pemrograman generik | TIDAK | Ya |
Pemrograman Prosedural | Ya | Ya |
Pemrograman fungsional | Ya | Sebagian |
Metaprogramming | TIDAK | Ya |
Cerminan | TIDAK | TIDAK |
Array multidimensi didukung | Ya | Ya |
Platform | Apa saja yang memiliki kompiler | Apa saja yang memiliki kompiler |
Asal C dan C++
Dennis Ritchie dari Bell Labs merancang C, bahasa pemrograman komputer tujuan umum pada tahun 1972 untuk digunakan dengan UNIX, sistem operasi saat itu. C sebagian besar digunakan untuk pemrograman perangkat lunak sistem, tetapi juga sangat berguna untuk membuat perangkat lunak aplikasi umum. Beberapa kata sifat yang digunakan untuk menggambarkan C adalah bahasa terstruktur, imperatif & prosedural.
C ++ (awalnya bernama "C with Class" dan masih dikenal sebagai superstruktur C di lingkaran komputer) dikembangkan sebagai peningkatan C oleh Bjarne Strousttrup pada tahun 1983 di Bell Labs. Stroustrup, pada tahun 1979, dimulai dengan menambahkan kelas, fungsi virtual, kelebihan operator, warisan berganda, templat, penanganan pengecualian dll. Standar bahasa pemrograman C ++ diratifikasi sebagai ISO/IEC 14882: 1998 pada tahun 1998 dan versi saat ini adalah versi 2003, ISO/IEC 14882: 2003 yang merupakan versi yang dikoreksi dari C ++ 1998. "Laporan Teknis Perpustakaan 1", yang dirilis pada tahun 2005 memberikan rincian ekstensi ke perpustakaan standar tanpa menjadi bagian dari versi standar. Versi baru dari standar (secara informal dikenal sebagai C ++ 0x) sedang dikembangkan. C ++ telah menjadi bahasa pemrograman komersial yang sangat sukses sejak tahun 1990. Meskipun C ++ bebas royalti, dokumentasinya tidak tersedia secara bebas.
Penggunaan C VS. C++
C terbukti sangat berguna dalam menjalankan aplikasi yang dikodekan dalam bahasa perakitan karena kekuatannya seperti kompiler sederhana, tingkat akses memori yang lebih rendah, dukungan waktu lari yang lebih rendah dan bahasa pembangunan yang efisien yang selaras dengan instruksi perangkat keras. Kreditnya yang lain adalah bahwa ia sangat portabel (kompatibel dengan berbagai OS & platform) dengan perubahan kode sumber yang sangat minim. Dengan demikian telah memungkinkan operasi jarak jauh & kemandirian dari perangkat keras. C juga sesuai dengan berbagai standar, membuatnya bekerja dengan segalanya.
C ++ dikenal sebagai bahasa tingkat menengah. Karena fakta bahwa C ++ terdiri dari fitur bahasa tingkat tinggi dan tingkat rendah. Beberapa kata sifat yang digunakan untuk menggambarkan C ++ diketik statis, bentuk bebas, multi-paradigma dan pemrograman prosedural pendukung.
Strousttrup, saat pemrograman untuk pH.D Tesis, menemukan bahwa bahasa simula memiliki fitur tingkat tinggi yang bermanfaat untuk pengembangan perangkat lunak yang besar, tetapi terlalu lambat untuk penggunaan praktis, sedangkan BCPL (bahasa) cepat, tetapi terlalu rendah dan tidak cocok untuk pengembangan perangkat lunak yang besar. Di Bell Labs, ia harus menganalisis kernel Unix sehubungan dengan komputasi terdistribusi yang menciptakan masalah lebih lanjut dan ia berangkat untuk meningkatkan C (karena sifatnya yang sangat portabel) dengan fitur -fitur dari simula. C ++ dibuat pada tahun 1983 dengan fitur-fitur tambahan seperti fungsi virtual, nama fungsi dan kelebihan muatan operator, referensi, konstanta, memori toko bebas yang dikendalikan pengguna, pemeriksa jenis yang ditingkatkan dan komentar satu baris dengan dua slash maju (//). CFRONT (versi komersial) dirilis pada tahun 1985 dengan kelas, kelas turunan, pemeriksaan tipe yang kuat, inlining, dan fitur argumen default. 1985 juga melihat rilis bahasa pemrograman C ++, referensi penting untuk bahasa tanpa adanya standar resmi. Ini diikuti oleh pelepasan C ++ 2.0 Pada tahun 1989 dengan fitur seperti warisan ganda, kelas abstrak, fungsi anggota statis, fungsi anggota const dan anggota yang dilindungi. Fitur seperti templat, pengecualian, ruang nama, gips baru dan tipe boolean ditambahkan pasca 1990.
Seiring dengan bahasa, perpustakaannya juga berevolusi, dengan beberapa tambahan seperti Perpustakaan Stream I/O, Perpustakaan Template Standar dll.
Edisi pertama buku K&R yang ditulis oleh Dennis Ritchie & Brian Kernighan (Nama Asli: Bahasa Pemrograman C) menggambarkan versi C mereka sebagai K&R C dengan spesifikasi lengkap, sedangkan edisi selanjutnya termasuk ANSI (Standar Nasional Amerika Amerika American National Standards termasuk American National Standards termasuk Amerika Nasional Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika Amerika American National Standards termasuk American National Standards termasuk National National National American National Amerika Institut) C Standar. Beberapa fitur menonjol yang dijelaskan adalah pengenalan berbagai tipe data, penghapusan beberapa ambiguitas semantik, penghilangan deklarasi fungsi lainnya dll. Bahkan setelah pengenalan ANSI C, K&R C terus menjadi bahasa pemrograman yang paling portabel untuk pemrogram karena kompatibilitasnya yang lebih luas.
Deklarasi fungsi K&R tidak termasuk informasi apa pun tentang argumen fungsi yang mengarah pada performa pemeriksaan tipe parameter fungsi, meskipun beberapa kompiler mengeluarkan pesan peringatan jika fungsi lokal dipanggil dengan jumlah argumen yang salah atau jika beberapa panggilan ke fungsi eksternal yang digunakan digunakan jumlah argumen yang berbeda. Alat seperti utilitas serat Unix dibuat untuk memeriksa konsistensi fungsi yang digunakan di beberapa file sumber.
Karakteristik bahasa
Karakteristik c
Beberapa karakteristik penting C adalah sebagai berikut:
- Fasilitas pemrograman terstruktur
- Mengkonfirmasi tradisi algol
- Evaluasi Sirkuit Pendek - Penggunaan hanya satu operan jika hasilnya dapat ditentukan dengan itu sendiri
- Sistem pengetikan statis untuk menghindari operasi yang tidak diinginkan
- Nilai parameter yang diteruskan dengan relevansi dengan nilai pointer
- Kombinasi & manipulasi data heterogen
- Kata kunci yang dipesan dan teks sumber format bebas
- Jumlah operator majemuk yang lebih besar, seperti +=, ++
- Kapasitas persembunyian variabel besar, meskipun definisi fungsi tidak dapat dijelaskan
- Karakter - Penggunaan Integer Mirip dengan Bahasa Majelis
- Akses tingkat rendah ke memori komputer melalui alamat mesin dan pointer yang diketik
- Pointer fungsi memungkinkan bentuk penutupan dasar & runtime polimorfik
- Pengindeksan array aritmatika pointer (gagasan sekunder)
- Prosesor standar untuk mendefinisikan makro, termasuk file kode sumber & kompilasi bersyarat
- Fungsi input/output dan matematika yang kompleks dengan delegasi yang konsisten ke rutinitas perpustakaan
- Sintaks Sama dengan "B" (pendahulunya C) tetapi berbeda dari Algol E.G.: ... diganti mulai… end, && dan || diganti dan & atau, yang
- Sedangkan B digunakan & dan | Dalam kedua makna, C membuat mereka secara sintaksis berbeda dari operator bit-bijaksana
- Kesamaan dengan Fortran E.G: Tanda yang sama untuk penugasan (menyalin) & dua tanda setara berturut-turut untuk menguji kesetaraan (dibandingkan dengan Persamaan) atau tanda tangan yang sama dalam dasar)
Fitur tidak resmi lainnya yang ditambahkan dengan waktu adalah:
- Fungsi batal
- Fungsi mengembalikan jenis struct atau serikat pekerja alih -alih pointer
- Penugasan diaktifkan untuk tipe data struct
- Kualifikasi const untuk membuat objek hanya baca
- Tipe yang disebutkan
- Creationg alat untuk menghindari masalah yang melekat pada bahasa
Segera C menjadi cukup kuat untuk memiliki kernel Unix (ditulis dalam bahasa perakitan) ditulis ulang menjadikannya salah satu kernel OS pertama yang ditulis dalam bahasa selain dari bahasa perakitan.
Karakteristik c++
- C ++ dirancang untuk menjadi bahasa tujuan umum yang diketik secara statis yang seefisien dan portabel seperti C
- C ++ dirancang untuk secara langsung dan komprehensif mendukung beberapa gaya pemrograman (pemrograman prosedural, abstraksi data, pemrograman berorientasi objek, dan pemrograman generik)
- C ++ dirancang untuk memberikan pilihan programmer, bahkan jika ini memungkinkan programmer untuk memilih secara tidak benar
- C ++ dirancang agar kompatibel dengan C mungkin, oleh karena itu memberikan transisi yang lancar dari C
- C ++ menghindari fitur yang spesifik platform atau tidak
- C ++ tidak menimbulkan overhead untuk fitur yang tidak digunakan
- C ++ dirancang untuk berfungsi tanpa lingkungan pemrograman yang canggih
Polimorfisme, salah satu kualitas terkemuka C ++, memungkinkan banyak implementasi dengan interfase tunggal dan untuk objek untuk bertindak sesuai keadaan. C ++ mendukung polimorfisme statis (waktu kompilasi) dan dinamis (run-time). Polimorfisme waktu kompilasi tidak memungkinkan keputusan run-time tertentu, sedangkan polimorfisme run-time biasanya menimbulkan penalti kinerja. C ++, meskipun dianggap sebagai superset C, ada beberapa perbedaan yang menyebabkan beberapa kode C yang valid tidak valid dalam C ++ atau berperilaku berbeda di C++. Masalah seperti C ++ yang mendefinisikan kata kunci baru yaitu baru & kelas, yang digunakan sebagai pengidentifikasi dalam c. Kode C dan C ++ dapat dicampur dengan mendeklarasikan kode C apa pun yang akan dipanggil dari/digunakan dalam C ++ dengan C Linkage & dengan menempatkannya di dalam blok Extern "C" / * C */.
Perkembangan dalam dua bahasa
Seiring waktu, standardisasi menjadi semakin penting karena sejumlah besar ekstensi dan perpustakaan acak dengan semakin populernya bahasa dan kurangnya implementasi kompiler yang tepat sesuai spesifikasi. Salah satu tujuan dari proses standardisasi C adalah untuk menghasilkan superset K&R C, menggabungkan banyak fitur tidak resmi yang diperkenalkan selanjutnya. Namun, komite standar termasuk beberapa fitur baru seperti prototipe fungsi, pointer void, dukungan untuk set karakter internasional dan lokal dan preprocessor yang lebih mampu. Sintaks untuk deklarasi parameter juga ditambah. Pasca tahun 1970 -an, C menggantikan dasar sebagai bahasa terkemuka untuk pemrograman mikroprosesor dan menjadi populer dengan kolaborasinya dengan PC IBM. Sementara itu, Bjarne Stroustrup dan lainnya di Bell Labs mulai bekerja untuk menciptakan C ++, yang menambahkan konstruksi bahasa pemrograman yang berorientasi objek ke C ke C. Lebih lanjut, ANSI membentuk komite pada tahun 1983 yang disebut X3J11, untuk menetapkan spesifikasi standar C dan pada tahun 1989, standar tersebut diratifikasi sebagai ANSI X3.159-1989 "Bahasa Pemrograman C."Ini adalah versi C yang sering disebut sebagai ANSI C, Standard C atau C89. C90, diperkenalkan pada tahun 1990, adalah AME sebagai C89 yang melarang beberapa perubahan kecil. Sementara C ++ berevolusi dengan cepat, C tetap statis hingga 1995 ketika Amandemen Normatif 1 menciptakan standar baru yang menjalani revisi lebih lanjut, yang mengarah ke publikasi ISO 9899: 1999 pada tahun 1999. Standar ini biasanya disebut sebagai "C99."Itu diadopsi sebagai standar ANSI pada Maret 2000. Beberapa fungsi yang lebih baru disebutkan di bawah ini:
- Fungsi inline
- Kemampuan untuk mendeklarasikan variabel di mana saja, bukan hanya setelah deklarasi lain atau pada awal pernyataan majemuk
- Jenis data baru seperti int int, tipe integer yang diperluas opsional, tipe data boolean eksplisit dan tipe kompleks untuk menunjukkan bilangan kompleks
- Panjang array bisa bervariasi
- Komentar satu baris dimulai dengan // didukung
- Fungsi perpustakaan seperti snprintf
- File header baru, seperti stdbool.h dan inttypes.H
- Fungsi matematika tipe-generik (TGMATH.H)
- Peningkatan dukungan untuk IEEE Floating Point
- Inisialisasi yang ditunjuk
- Literal majemuk
- Dukungan untuk makro variadik (makro arity variabel)
C ++, sambil terus berevolusi untuk memenuhi persyaratan masa depan, versi yang lebih baru yang disebut C ++ 0x menunjukkan bahwa itu diharapkan akan dirilis sebelum 2010 sedang dikembangkan. Indikasi menunjukkan bahwa C ++ akan terus memanfaatkan sifat multi-paradigma dan perbaikan penting mungkin merupakan dukungan asli untuk threading dan konsep sehingga membuat bekerja dengan templete lebih mudah. Lebih kontroversial, menambahkan koleksi sampah saat ini sedang dalam diskusi berat. Sebuah kelompok bernama Boost.org, yang menyarankan Komite Standar C ++ tentang fitur dan peningkatan yang baik yang diperlukan, bekerja secara luas untuk mengembangkan C ++ dalam bentuk saat ini dengan kemampuan fungsional dan metaprogram yang diperluas.
Dalam desain dan evolusi C ++ (1994), Bjarne Strousttrup menggambarkan beberapa aturan yang ia gunakan untuk merancang C++. Mengetahui aturan membantu untuk memahami mengapa C ++ adalah apa adanya. Jauh lebih detail dapat ditemukan dalam desain dan evolusi C++.
Pengaruh
Pengaruh C dapat ditelusuri untuk bekerja seperti AWK, CSH, C ++, C#, D, Objective-C, Concurrent-C, BITC, Java dan JavaScript, Limbo, Perl, PHP, dll. Beberapa implementasi utama C termasuk Borland C, Watcom C, GCC & MSVC. C ++, kreditnya telah memengaruhi karya -karya lain seperti D, C#, ADA 95, Aikido, Java & PHP.
Kritik C VS. C++
Terlepas dari popularitasnya, C telah dikritik karena operasi yang diinginkan terlalu sulit untuk dicapai dan operasi yang tidak diinginkan menjadi terlalu mudah untuk secara tidak sengaja memohon sehingga melibatkan lebih banyak keterampilan, pengalaman, upaya, dan perhatian terhadap detail daripada bahasa pemrograman lainnya untuk penggunaan yang aman & efektif bahasa.
Ketika bahasa yang berorientasi objek menjadi populer, C ++ adalah perpanjangan C yang memberikan kemampuan berorientasi objek dengan C ++ yang awalnya diimplementasikan sebagai preprocessor-kode sumber diterjemahkan ke dalam C, dan kemudian dikompilasi dengan kompiler C.
C ++ berasal dari C, juga terjadi pada sebagian besar kritik yang dilontarkan terhadap C. Tetapi karena bahasanya sebenarnya merupakan komposisi dari dua bahasa yang berbeda, bersama dengan beban program besar, sering berakhir membuat kompilasi besar dan tidak pantas dalam hal ukuran murni. Ketika masalah ini dicoba dihindari, dengan menonaktifkan beberapa kode pinggiran, ia dikritik lagi karena kehilangan beberapa utilitas penting. Pencipta C ++ juga merasa bahwa C ++ dibenarkan untuk menjadi bahasa yang kompleks karena persyaratan pemrograman modern juga meningkat secara besar -besaran jika dibandingkan dengan tadi.