C vs. C ++

C vs. C ++

Ini adalah perbandingan objektif aplikasi, penggunaan dan ciri bahasa C dan C++. Asal -usul dan trajektori pembangunan kedua -dua bahasa pengaturcaraan juga dibincangkan.

Carta Perbandingan

Perbezaan - Persamaan - C versus c ++ carta perbandingan
CC++
  • Penarafan semasa ialah 4.01/5
  • 1
  • 2
  • 3
  • 4
  • 5
(412 penilaian)
  • Penarafan semasa ialah 4.12/5
  • 1
  • 2
  • 3
  • 4
  • 5
(412 penilaian)
Direka oleh Dennis Ritchie Bjarne Stroustrup
Kutipan sampah Manual; membolehkan pengurusan memori yang lebih baik. Tiada GC tersedia di Perpustakaan Standard C ++ (STD). Walau bagaimanapun, STD menyediakan cara yang cekap dan deterministik untuk menguruskan sumber seperti pemilikan objek dan penghitungan rujukan.
Dipengaruhi oleh B (BCPL, CPL), Algol 68, Perhimpunan C, Simula, Ada 83, Algol 68, CLU, ML
Muncul dalam 1972 1985
Kelas Menggunakan struktur sebaliknya, dan oleh itu memberikan lebih banyak kebebasan untuk menggunakan elemen reka bentuk dalaman Kelas dan Struktur
OOP (pengaturcaraan berorientasikan objek) Tidak dibina; kebebasan untuk menetapkan struktur untuk bertindak seperti objek. Tidak mempunyai keupayaan untuk mengisytiharkan enkapsulasi. Dibina dalam; Saiz dan susun atur objek adalah deterministik. Panggilan fungsi maya boleh dilakukan tanpa vtable melalui CRTP.
Pelaksanaan utama GCC, MSVC, Borland C, Watcom C Koleksi GNU Compiler, Microsoft Visual C ++, Borland C ++ Builder, Intel C ++ Compiler, LLVM/CLANG
Menaip disiplin Statik, lemah Statik, kuat, tidak selamat, nominatif
Blok komen pematuhan / * dan */ / * dan */
Terminator Penyata ; ;
Comments Inline Delimiter // //
Dipengaruhi AWK, CSH, C ++, C#, Objective-C, Bitc, D, Concurrent C, Java, JavaScript, Limbo, Perl, PHP Ada 95, C#, Java, PHP, D, Aikido
Sambungan nama fail biasa .c .cc, .CPP, .cxx, .h, .HH, .HPP
Paradigma Bahasa pelaksanaan sistem yang penting (prosedur) Multi-paradigma, berorientasikan objek, generik, prosedur, berfungsi, meta
Arrays dinamik bersaiz Tidak Tidak
Platform Hampir apa -apa di planet ini; memerlukan recompile Hampir apa sahaja, termasuk platform berasaskan OS dan bukan OS
Kelajuan Aplikasi c lebih cepat untuk menyusun dan melaksanakan daripada aplikasi C ++ +-5% apabila dibandingkan dengan C jika anda tahu cara menggunakan C yang baik C++. Prestasi program C ++ dan C selalunya sama, kerana penyusun untuk kedua -dua bahasa itu matang.
Aliran pelaksanaan Dari atas ke bawah Dari atas ke bawah
Pengaturcaraan-termasuk #include #include
Jenis pengaturcaraan Tiada jenis rentetan asli; sering diisytiharkan sebagai pelbagai watak Array, std :: rentetan
Pengaturcaraan input /output scanf untuk input; printf untuk output iostream, fstream (std :: cin, std :: cout)
Kod Disusun dengan fail boleh dilaksanakan binari asli menggunakan pengkompil seperti BCC. Disusun dengan fail yang boleh dilaksanakan binari asli
Jenis bahasa Bahasa berorientasikan prosedur Bahasa berorientasikan objek pelbagai paradigma
Dibangunkan oleh Dennis Ritchie & Bell Labs Bjarne Stroustrup
Berorientasikan objek Tidak asli Ya
Pengaturcaraan generik Tidak Ya
Pengaturcaraan prosedur Ya Ya
Pengaturcaraan fungsional Ya Separa
Metaprogramming Tidak Ya
Refleksi Tidak Tidak
Susunan multidimensi disokong Ya Ya
Platform Mana -mana yang mempunyai pengkompil Mana -mana yang mempunyai pengkompil

Asal C dan C++

Dennis Ritchie dari Labs Bell merancang C, bahasa pengaturcaraan komputer tujuan umum pada tahun 1972 untuk digunakan dengan Unix, sistem operasi pada masa itu. C kebanyakannya digunakan untuk pengaturcaraan perisian sistem, tetapi juga sangat berguna untuk membuat perisian aplikasi umum. Beberapa kata sifat yang digunakan untuk menggambarkan C adalah bahasa berstruktur, penting & prosedural yang tersusun.

C ++ (asalnya dinamakan "C dengan kelas" dan masih dikenali sebagai struktur superstruktur C dalam kalangan komputer) telah dibangunkan sebagai peningkatan C oleh Bjarne Stroustrup pada tahun 1983 di Bell Labs. Strooustrup, pada tahun 1979, dimulakan dengan menambahkan kelas, fungsi maya, overload operator, warisan berganda, templat, pengendalian pengecualian dan lain -lain. Standard bahasa pengaturcaraan C ++ telah disahkan sebagai ISO/IEC 14882: 1998 pada tahun 1998 dan versi semasa adalah versi 2003, ISO/IEC 14882: 2003 yang merupakan versi yang diperbetulkan dari C ++ 1998. "Laporan Teknikal Perpustakaan 1", yang dikeluarkan pada tahun 2005 memberikan butiran sambungan ke perpustakaan standard tanpa menjadi sebahagian daripada versi standar. Versi baru standard (secara tidak rasmi dikenali sebagai C ++ 0x) sedang dibangunkan. C ++ telah menjadi bahasa pengaturcaraan komersial yang sangat berjaya sejak tahun 1990. Walaupun C ++ adalah bebas royalti, dokumentasinya tidak tersedia secara bebas.

Penggunaan c vs. C++

C terbukti sangat berguna dalam menjalankan aplikasi yang dikodkan dalam bahasa pemasangan kerana kekuatannya seperti pengkompil mudah, tahap akses yang lebih rendah, sokongan masa lari yang lebih rendah dan bahasa pembinaan yang cekap yang selaras dengan arahan perkakasan. Satu lagi kreditnya ialah ia adalah sangat mudah alih (serasi dengan pelbagai OS & Platform) dengan perubahan kod sumber yang sangat minimum diperlukan. Oleh itu, ia telah membolehkan operasi jauh & kemerdekaan dari perkakasan. C juga mematuhi pelbagai piawaian, menjadikannya berfungsi dengan segalanya.

C ++ dikenali sebagai bahasa peringkat pertengahan. Kerana fakta bahawa C ++ terdiri daripada kedua-dua ciri bahasa peringkat tinggi dan rendah. Beberapa kata sifat yang digunakan untuk menggambarkan C ++ adalah statik, bentuk bebas, multi-paradigma dan pengaturcaraan prosedur sokongan.

Stroustrup, semasa pengaturcaraan untuk pHnya.Tesis d, mendapati bahawa bahasa simula mempunyai ciri tahap tinggi yang berguna untuk pembangunan perisian yang besar, tetapi terlalu lambat untuk kegunaan praktikal, sementara BCPL (bahasa) cepat, tetapi terlalu rendah dan dengan itu tidak sesuai untuk pembangunan perisian yang besar. Di Bell Labs, dia terpaksa menganalisis kernel Unix berkenaan dengan pengkomputeran yang diedarkan yang menimbulkan masalah selanjutnya dan dia berangkat untuk meningkatkan C (kerana sifat mudah alihnya) dengan ciri -ciri dari simula. C ++ dicipta pada tahun 1983 dengan ciri-ciri tambahan seperti fungsi maya, nama fungsi dan pengendali overloading, rujukan, pemalar, memori kedai percuma yang dikawal oleh pengguna, pemeriksaan jenis yang lebih baik dan komen tunggal dengan dua slash ke hadapan (//). CFront (Versi Komersial) dikeluarkan pada tahun 1985 dengan kelas, kelas yang diperolehi, pemeriksaan jenis yang kuat, inlining, dan ciri argumen lalai. 1985 juga menyaksikan pembebasan bahasa pengaturcaraan C ++, rujukan penting kepada bahasa tanpa ketiadaan standard rasmi. Ini diikuti dengan pembebasan C ++ 2.0 pada tahun 1989 dengan ciri -ciri seperti warisan berganda, kelas abstrak, fungsi ahli statik, fungsi anggota const dan ahli yang dilindungi. Ciri -ciri seperti templat, pengecualian, ruang nama, pelakon baru dan jenis boolean ditambah pos 1990.

Bersama bahasa itu, perpustakaannya juga berkembang, dengan beberapa penambahan seperti Perpustakaan Stream I/O, Perpustakaan Templat Standard dan lain -lain.

Edisi pertama buku K & R yang ditulis oleh Dennis Ritchie & Brian Kernighan (nama asal: bahasa pengaturcaraan C) menerangkan versi C mereka sebagai K & R C dengan spesifikasi penuh, manakala edisi kemudian termasuk ANSI (piawaian kebangsaan Amerika Institut) standard c. Beberapa ciri penting yang diterangkan adalah pengenalan pelbagai jenis data, penyingkiran beberapa kekaburan semantik, peninggalan pengisytiharan fungsi lain dan lain -lain. Walaupun selepas pengenalan ANSI C, K & R C terus menjadi bahasa pengaturcaraan yang paling mudah alih untuk pengaturcara kerana keserasiannya yang lebih luas.

Pengisytiharan fungsi K & R tidak termasuk apa-apa maklumat mengenai hujah fungsi yang membawa kepada pemeriksaan jenis parameter jenis fungsi, walaupun sesetengah penyusun mengeluarkan mesej amaran jika fungsi tempatan dipanggil dengan bilangan argumen yang salah atau jika banyak panggilan ke fungsi luaran yang digunakan Bilangan argumen yang berbeza. Alat seperti utiliti serat Unix dicipta untuk memeriksa konsistensi fungsi yang digunakan di pelbagai fail sumber.

Ciri bahasa

Ciri -ciri c

Beberapa ciri penting C adalah seperti berikut:

  1. Kemudahan pengaturcaraan berstruktur
  2. Mengesahkan tradisi algol
  3. Penilaian Litar Pendek - Penggunaan hanya satu operan jika hasilnya dapat ditentukan dengannya sendiri
  4. Sistem menaip statik untuk mengelakkan operasi yang tidak diinginkan
  5. Nilai lulus parameter dengan kaitan dengan nilai penunjuk lulus
  6. Gabungan & manipulasi data heterogen
  7. Kata kunci terpelihara dan teks sumber format percuma
  8. Bilangan pengendali kompaun yang lebih besar, seperti +=, ++
  9. Kapasiti bersembunyi pemboleh ubah yang besar, walaupun definisi fungsi tidak bersesuaian
  10. Watak - Penggunaan integer serupa dengan bahasa pemasangan
  11. Akses peringkat rendah ke memori komputer melalui alamat mesin dan penunjuk yang ditaip
  12. Pointer fungsi membolehkan bentuk penutupan penutupan & runtime polimorfik
  13. Pengindeks Array Aritmetik Penunjuk (tanggapan sekunder)
  14. Pemproses piawai untuk menentukan makro, termasuk fail kod sumber & kompilasi bersyarat
  15. Input/output kompleks dan fungsi matematik dengan delegasi yang konsisten ke rutin perpustakaan
  16. Sintaks sama seperti "b" (pendahuluan c) tetapi berbeza dari algol e.g.: ... diganti Begin ... end, && dan || diganti dan & atau, yang
  17. Manakala B digunakan & dan | Dalam kedua-dua makna, C menjadikan mereka berbeza secara sintaktik dari pengendali yang bijak
  18. Persamaan dengan FORTRAN E.G: Tanda sama untuk tugasan (penyalinan) & dua tanda sama berturut-turut untuk menguji kesamaan (bandingkan dengan Persamaan) atau tanda sama dalam asas)

Ciri -ciri tidak rasmi yang lain ditambah dengan masa adalah:

  1. Fungsi tidak sah
  2. Fungsi mengembalikan jenis struktur atau kesatuan dan bukannya petunjuk
  3. Tugasan diaktifkan untuk jenis data struct
  4. kualifier const untuk membuat objek baca sahaja
  5. Jenis yang disenaraikan
  6. Penciptaan alat untuk mengelakkan masalah bahasa yang wujud

Tidak lama lagi C menjadi cukup kuat untuk mempunyai kernel unix (ditulis dalam bahasa perhimpunan) ditulis semula menjadikannya salah satu kernel OS pertama yang ditulis dalam bahasa selain bahasa perhimpunan.

Ciri -ciri c++

  1. C ++ direka untuk menjadi bahasa yang ditaip secara statik, tujuan umum yang cekap dan mudah alih sebagai c
  2. C ++ direka untuk secara langsung dan komprehensif menyokong pelbagai gaya pengaturcaraan (pengaturcaraan prosedur, abstraksi data, pengaturcaraan berorientasikan objek, dan pengaturcaraan generik)
  3. C ++ direka untuk memberi pilihan pengaturcara, walaupun ini memungkinkan pengaturcara memilih dengan tidak betul
  4. C ++ direka untuk bersesuaian dengan c yang mungkin, oleh itu memberikan peralihan yang lancar dari c
  5. C ++ Mengelakkan ciri -ciri yang merupakan tujuan khusus atau tidak umum
  6. C ++ tidak menanggung overhead untuk ciri yang tidak digunakan
  7. C ++ direka untuk berfungsi tanpa persekitaran pengaturcaraan yang canggih

Polimorfisme, salah satu sifat terkemuka C ++, membolehkan pelaksanaan dengan satu interphase dan objek bertindak mengikut keadaan. C ++ menyokong kedua-dua polimorfisme statik (kompilasi) dan dinamik (jangka masa). Polimorfisme kompilasi masa tidak membenarkan keputusan jangka masa tertentu, sementara polimorfisme jangka masa biasanya menimbulkan penalti prestasi. C ++, walaupun dianggap superset C, terdapat beberapa perbezaan yang menyebabkan beberapa kod C yang sah menjadi tidak sah di C ++ atau untuk berkelakuan berbeza dalam C++. Isu seperti C ++ Menentukan Kata Kunci Baru iaitu Baru & Kelas, yang digunakan sebagai pengenal dalam C. Kod C dan C ++ boleh digabungkan dengan mengisytiharkan mana -mana kod C yang akan dipanggil dari/digunakan dalam C ++ dengan C Linkage & dengan meletakkannya dalam blok Extern "C" / * C */.

Perkembangan dalam dua bahasa

Dengan masa, penyeragaman menjadi lebih dan lebih penting kerana banyak sambungan dan perpustakaan rawak dengan populariti bahasa yang semakin meningkat dan kekurangan pelaksanaan pengkompil yang tepat seperti spesifikasi. Salah satu tujuan proses penyeragaman C adalah untuk menghasilkan superset K & R C, menggabungkan banyak ciri tidak rasmi yang diperkenalkan kemudian. Walau bagaimanapun, Jawatankuasa Piawaian termasuk beberapa ciri baru seperti prototaip fungsi, penunjuk tidak sah, sokongan untuk set aksara antarabangsa dan tempatan dan preprocessor yang lebih berkebolehan. Sintaks untuk pengisytiharan parameter juga ditambah. Post 1970 -an, C menggantikan asas sebagai bahasa utama untuk pengaturcaraan mikropemproses dan menjadi popular dengan kerjasama dengan PCS IBM. Sementara itu, Bjarne Stroustrup dan lain-lain di Bell Labs mula bekerja untuk mewujudkan C ++, yang menambah bahasa pengaturcaraan berorientasikan objek membina ke C C. Selanjutnya, ANSI membentuk satu jawatankuasa pada tahun 1983 yang dipanggil X3J11, untuk menubuhkan spesifikasi standard C dan pada tahun 1989, standard ini telah disahkan sebagai ANSI X3.159-1989 "Bahasa pengaturcaraan c."Ini adalah versi C yang sering disebut sebagai ANSI C, Standard C atau C89. C90, yang diperkenalkan pada tahun 1990, adalah AME sebagai C89 yang menghalang beberapa perubahan kecil. Walaupun C ++ berkembang dengan pesat, C tetap statik sehingga tahun 1995 apabila pindaan normatif 1 mencipta standard baru yang menjalani semakan lebih lanjut, yang membawa kepada penerbitan ISO 9899: 1999 pada tahun 1999. Standard ini biasanya dirujuk sebagai "C99."Ia diterima pakai sebagai standard ANSI pada Mac 2000. Beberapa fungsi baru disebutkan di bawah:

  • Fungsi inline
  • Keupayaan untuk mengisytiharkan pembolehubah di mana sahaja, bukan hanya selepas perisytiharan lain atau pada permulaan pernyataan kompaun
  • Jenis data baru seperti int panjang panjang, jenis integer lanjutan pilihan, jenis data boolean yang jelas dan jenis kompleks untuk menunjukkan nombor kompleks
  • Panjang array boleh berubah
  • Komen satu baris bermula dengan // disokong
  • Fungsi perpustakaan seperti snprintf
  • Fail header baru, seperti stdbool.H dan intypes.h
  • Fungsi matematik jenis generik (TGMATH.h)
  • Sokongan yang lebih baik untuk titik terapung IEEE
  • Inisialisasi yang ditetapkan
  • Komponen literals
  • Sokongan untuk makro variadik (makro ariti berubah -ubah)

C ++, sambil terus berkembang untuk memenuhi keperluan masa depan, versi baru yang dipanggil C ++ 0x menunjukkan bahawa ia dijangka akan dikeluarkan sebelum 2010 sedang dibangunkan. Petunjuk mencadangkan bahawa C ++ akan terus memanfaatkan sifat multi-paradigma dan penambahbaikan yang ketara mungkin sokongan asli untuk threading dan konsep dan dengan itu membuat kerja dengan lebih mudah. Lebih kontroversial, menambah pengumpulan sampah kini sedang dalam perbincangan berat. Kumpulan yang dipanggil Boost.Org, yang menasihatkan Jawatankuasa Standard C ++ mengenai Ciri -ciri dan Penambahbaikan yang Baik, berfungsi secara meluas untuk membangunkan C ++ dalam bentuk semasa dengan kebolehan berfungsi dan metaprogram yang diperluaskan.

Dalam reka bentuk dan evolusi C ++ (1994), Bjarne Stroustrup menerangkan beberapa peraturan yang digunakannya untuk mereka bentuk C++. Mengetahui peraturan membantu memahami mengapa c ++ adalah cara. Lebih terperinci boleh didapati dalam reka bentuk dan evolusi c++.

Pengaruh

Pengaruh C dapat dikesan untuk berfungsi seperti AWK, CSH, C ++, C#, D, Objektif-C, Concurrent-C, BITC, Java dan JavaScript, Limbo, Perl, PHP, dll. Beberapa pelaksanaan utama C termasuk Borland C, Watcom C, GCC & MSVC. C ++, kepada kreditnya telah mempengaruhi karya lain seperti D, C#, ADA 95, Aikido, Java & PHP.

Kritikan C vs. C++

Walaupun popularitinya, C telah dikritik kerana mempunyai operasi yang diinginkan terlalu sukar untuk dicapai dan operasi yang tidak diingini terlalu mudah untuk secara tidak sengaja memohon dengan itu melibatkan lebih banyak kemahiran, pengalaman, usaha, dan perhatian pengatur bahasa.

Apabila bahasa berorientasikan objek menjadi popular, C ++ adalah lanjutan C yang menyediakan keupayaan berorientasikan objek dengan C ++ yang asalnya dilaksanakan sebagai kod preprocessor-kod sumber diterjemahkan ke dalam C, dan kemudian disusun dengan pengkompil C.

C ++ yang berasal dari C, juga berlaku untuk mewarisi sebahagian besar kritikan yang disamakan dengan C. Tetapi kerana bahasa itu sebenarnya merupakan komposisi dua bahasa yang berbeza, bersama -sama dengan beban program besar, sering kali membuat kompilasi besar dan tidak sesuai dari segi saiz tulen. Apabila masalah ini cuba dielakkan, dengan melumpuhkan beberapa kod pinggir, ia sekali lagi dikritik kerana kehilangan beberapa utiliti penting. Pencipta C ++ juga merasakan bahawa C ++ dibenarkan menjadi bahasa yang kompleks sejak keperluan pengaturcaraan zaman moden juga meningkat dengan cara yang besar jika dibandingkan dengan zaman dahulu.