Berikut adalah manfaat C ++
- C ++ menyediakan fitur spesifik yang mereka tanyakan
- Kompiler C mereka hampir pasti merupakan kompilator C ++, jadi tidak ada implikasi biaya perangkat lunak
- C ++ sama portabelnya dengan C
- Kode C ++ bisa sama efisiennya dengan C (atau lebih, atau kurang)
Apakah ada alasan konkret dan skenario khusus, di mana seseorang harus menggunakan C di atas C ++?
Referensi ke pertanyaan ini: Perpustakaan untuk obat generik di C
Bukan duplikat, karena pertanyaan ini menanyakan tentang batasan bahasa dan bukan tentang harus / tidak boleh mempelajari satu bahasa di atas bahasa lain.
Bagi saya, pos Peter Kirkham adalah yang paling informatif, terutama terkait dengan masalah C99 yang belum saya pertimbangkan, jadi saya menerimanya. Terima kasih untuk semua yang telah ambil bagian.
Jawaban:
C adalah bahasa pemrograman yang lengkap. C bukanlah subset sembarang dari C ++. C sama sekali bukan bagian dari C ++.
Ini adalah C yang valid:
Untuk membuatnya dikompilasi sebagai C ++ Anda harus menulis:
yang tidak lagi valid C. (Anda dapat menggunakan cast gaya-C, yang akan dikompilasi dalam C, tetapi dijauhi oleh sebagian besar standar pengkodean C ++, dan juga oleh banyak programmer C; saksikan komentar "jangan cast malloc" di seluruh Stack Overflow) .
Mereka bukan bahasa yang sama, dan jika Anda memiliki proyek yang sudah ada di C, Anda tidak ingin menulis ulang dalam bahasa yang berbeda hanya untuk menggunakan perpustakaan. Anda lebih suka menggunakan pustaka yang dapat Anda gunakan untuk antarmuka dalam bahasa yang Anda gunakan. (Dalam beberapa kasus hal ini dimungkinkan dengan beberapa
extern "C"
fungsi pembungkus, bergantung pada bagaimana template / sebaris pustaka C ++.)Mengambil file C pertama dalam proyek saya kerjakan, ini adalah apa yang terjadi jika Anda hanya pertukaran
gcc std=c99
untukg++
:Total 69 baris kesalahan, empat di antaranya merupakan konversi tidak valid, tetapi sebagian besar untuk fitur yang ada di C99 tetapi tidak di C ++.
Ini tidak seperti saya menggunakan fitur-fitur itu untuk bersenang-senang. Ini akan membutuhkan pekerjaan yang signifikan untuk memindahkannya ke bahasa lain.
Jadi sangatlah salah untuk menyarankan itu
Seringkali ada implikasi biaya yang signifikan dalam mem-porting kode C yang ada ke subset prosedural C ++.
Jadi menyarankan 'menggunakan C ++ std :: queue class' sebagai jawaban untuk pertanyaan mencari implementasi perpustakaan dari antrian di C lebih baik daripada menyarankan 'gunakan tujuan C' dan 'panggil kelas java.util.Queue Java menggunakan JNI' atau 'panggil pustaka CPython' - Sasaran C sebenarnya adalah superset yang tepat dari C (termasuk C99), dan pustaka Java dan CPython keduanya dapat dipanggil langsung dari C tanpa harus mem-port kode yang tidak terkait ke bahasa C ++.
Tentu saja Anda dapat menyediakan façade C ke pustaka C ++, tetapi setelah Anda melakukannya, C ++ tidak berbeda dengan Java atau Python.
sumber
Saya menyadari ini bukan jawaban profesional atau jawaban yang bagus, tetapi bagi saya itu hanya karena saya sangat menyukai C. C itu kecil dan sederhana dan saya dapat menyesuaikan seluruh bahasa di otak saya, C ++ bagi saya selalu tampak seperti kekacauan besar yang meluas dengan semua jenis lapisan, saya kesulitan mengelus. Karena ini saya menemukan bahwa setiap kali saya menulis C ++ saya akhirnya menghabiskan lebih banyak waktu untuk debugging dan membenturkan kepala saya ke permukaan yang keras daripada ketika saya kode C. Sekali lagi saya menyadari bahwa banyak dari ini sebagian besar adalah hasil dari 'ketidaktahuan' saya sendiri.
Jika saya bisa memilih, saya akan menulis semua hal tingkat tinggi seperti antarmuka dan interaksi database dalam python (atau mungkin C #) dan semua hal yang harus cepat di C. Bagi saya itu memberi saya yang terbaik dari semua dunia. Menulis semuanya dalam C ++ terasa seperti mendapatkan yang terburuk dari semua dunia.
Sunting: Saya ingin menambahkan bahwa menurut saya C dengan beberapa fitur C ++ sebagian besar adalah ide yang buruk jika Anda akan menjadi beberapa orang yang mengerjakan sebuah proyek atau jika pemeliharaan adalah prioritas. Akan ada ketidaksepakatan tentang apa yang merupakan 'sedikit' dan bit mana yang harus dilakukan dalam C dan bit mana di C ++ yang akhirnya mengarah ke basis kode yang sangat skizofrenia.
sumber
C ++ tidak didukung di beberapa lingkungan dunia nyata, seperti sistem tertanam tingkat rendah. Dan ada alasan bagus untuk itu: C cukup baik untuk hal-hal seperti itu, jadi mengapa menggunakan sesuatu yang lebih besar?
sumber
Saya benci pemrograman dalam C ++.
sumber
Beberapa alasan mungkin:
Saya masih lebih suka menulis dalam C ++ ketika saya bisa melakukannya, dan secara keseluruhan, menurut saya manfaatnya lebih besar daripada kerugiannya. Tetapi saya juga dapat melihat argumen untuk menggunakan C dalam beberapa kasus.
sumber
Ada banyak argumen tentang pemrograman, kinerja, dan hal-hal yang disematkan, saya tidak membelinya. C ++ mudah dibandingkan dengan C di area tersebut. Namun:
Baru-baru ini setelah diprogram dalam C ++ selama lebih dari 15 tahun, saya telah menemukan kembali akar C saya. Saya harus mengatakan bahwa meskipun ada fitur bagus di C ++ yang membuat hidup lebih mudah, ada juga banyak jebakan dan semacam "selalu ada cara yang lebih baik" dalam melakukan sesuatu. Anda tidak pernah benar-benar senang dengan solusi yang Anda lakukan. (Jangan salah paham, ini bisa menjadi hal yang baik, tetapi kebanyakan tidak).
C ++ memberi Anda tembakan tak terbatas. Yang bisa dibilang bagus tapi entah bagaimana Anda selalu berakhir menggunakan terlalu banyak. Ini berarti bahwa Anda menyamarkan solusi Anda dengan lapisan abstraksi yang "bagus" dan "cantik", umum, dll.
Apa yang saya temukan kembali ke C adalah bahwa itu benar-benar pemrograman yang menyenangkan lagi. Setelah menghabiskan begitu banyak waktu untuk memodelkan dan memikirkan tentang cara terbaik menggunakan warisan, saya menemukan bahwa pemrograman dalam C sebenarnya membuat kode sumber saya lebih kecil dan lebih mudah dibaca. Hal ini tentu saja tergantung pada tingkat disiplin diri Anda. Tetapi sangat mudah untuk meletakkan terlalu banyak abstraksi pada kode langsung, yang sebenarnya tidak diperlukan.
sumber
infinite gunfire
, ooh ya, sangat benar. Kaki kami benar-benar gemetar :)C memiliki keuntungan utama yaitu Anda hanya dapat melihat apa yang sebenarnya terjadi ketika Anda melihat beberapa bagian kode (ya preprocessor: kompilasi dengan -E dan kemudian Anda melihatnya). Sesuatu yang terlalu sering tidak benar ketika Anda melihat beberapa kode C ++. Di sana Anda memiliki konstruktor dan destruktor yang dipanggil secara implisit berdasarkan cakupan atau karena penugasan, Anda memiliki kelebihan beban operator yang dapat memiliki perilaku mengejutkan bahkan ketika tidak disalahgunakan dengan buruk. Saya akui bahwa saya gila kontrol, tetapi saya sampai pada kesimpulan bahwa ini bukan kebiasaan buruk bagi pengembang perangkat lunak yang ingin membuat perangkat lunak yang andal. Saya hanya ingin memiliki kesempatan yang adil untuk mengatakan bahwa perangkat lunak saya melakukan persis apa yang seharusnya dilakukan dan tidak memiliki perasaan buruk di perut saya pada saat yang sama karena saya tahu masih ada begitu banyak bug di dalamnya sehingga saya tidak mau '
C ++ juga memiliki template. Saya membenci dan mencintai mereka, tetapi jika ada yang mengatakan bahwa dia sepenuhnya memahami mereka, saya menyebutnya pembohong! Itu termasuk penulis kompilator serta orang-orang yang terlibat dalam mendefinisikan standar (yang menjadi jelas saat Anda mencoba membacanya). Ada begitu banyak kasus sudut menyesatkan yang tidak masuk akal yang terlibat sehingga tidak mungkin untuk mempertimbangkan semuanya saat Anda menulis kode yang sebenarnya. Saya suka template C ++ karena kekuatannya yang luar biasa. Sungguh menakjubkan apa yang dapat Anda lakukan dengan mereka, tetapi mereka juga dapat menyebabkan kesalahan yang paling aneh dan paling sulit ditemukan yang tidak dapat (tidak) bayangkan. Dan kesalahan tersebut benar-benar terjadi dan bahkan tidak jarang. Membaca tentang aturan yang terlibat untuk menyelesaikan template di C ++ ARM hampir membuat kepalaku meledak. Dan itu memberi saya perasaan tidak enak karena membuang waktu karena harus membaca pesan kesalahan kompilator yang panjangnya beberapa 1000 karakter yang saya perlukan sudah 10 menit atau lebih untuk memahami apa yang sebenarnya diinginkan kompilator dari saya. Dalam kode C ++ (pustaka) tipikal Anda juga sering menemukan banyak kode dalam file header untuk memungkinkan templat tertentu yang pada gilirannya membuat siklus kompilasi / eksekusi sangat lambat bahkan pada mesin yang cepat dan memerlukan kompilasi ulang sebagian besar kode saat Anda mengubah sesuatu sana.
C ++ juga memiliki perangkap const. Anda bisa menghindari const untuk semua kecuali kasus penggunaan yang paling sepele atau cepat atau lambat Anda harus membuangnya atau melakukan refaktorisasi sebagian besar basis kode saat ia berevolusi, terutama saat Anda akan mengembangkan desain OO yang bagus dan fleksibel.
C ++ memiliki pengetikan yang lebih kuat daripada C, dan itu bagus, tetapi terkadang saya merasa seperti sedang memberi makan Tamagotchi ketika saya mencoba mengkompilasi kode C ++. Sebagian besar dari peringatan dan kesalahan yang biasanya saya dapatkan darinya sebenarnya bukan saya melakukan sesuatu yang tidak akan berhasil, tetapi hanya hal-hal yang tidak disukai oleh kompiler saya lakukan dengan cara ini atau tidak tanpa memasukkan atau memasukkan beberapa kata kunci tambahan di sini dan sana.
Ini hanyalah beberapa alasan mengapa saya tidak menyukai C ++ untuk perangkat lunak yang saya tulis sendiri hanya menggunakan beberapa pustaka eksternal yang diduga kuat. Kengerian sebenarnya dimulai ketika Anda menulis kode dalam tim dengan orang lain. Hampir tidak masalah apakah mereka peretas C ++ yang sangat pintar atau pemula yang naif. Semua orang membuat kesalahan, tetapi C ++ membuatnya dengan sengaja sulit untuk menemukannya dan bahkan lebih sulit lagi untuk menemukannya sebelum terjadi.
Dengan C ++ Anda hanya tersesat tanpa menggunakan debugger sepanjang waktu tetapi saya ingin dapat memverifikasi kebenaran kode saya di kepala saya dan tidak harus bergantung pada debugger untuk menemukan kode saya berjalan di jalur yang tidak akan pernah saya antisipasi. Saya benar-benar mencoba untuk menjalankan semua kode saya di kepala saya dan mencoba untuk mengambil semua cabang yang dimilikinya, bahkan di subrutin dll dan menggunakan debugger hanya sesekali hanya untuk melihat seberapa baik itu berjalan melalui semua tempat nyaman yang saya persiapkan untuk itu. Menulis dan menjalankan begitu banyak kasus uji sehingga semua jalur kode telah digunakan dalam semua kombinasi dengan semua jenis data masukan yang aneh tidak mungkin dilakukan. Jadi Anda mungkin tidak mengetahui bug di program C ++ tetapi itu tidak berarti bug tersebut tidak ada. Semakin besar proyek C ++ semakin rendah menjadi keyakinan saya bahwa ia tidak akan memiliki banyak bug yang tidak terdeteksi bahkan jika itu berjalan sempurna dengan semua data pengujian yang kami miliki. Akhirnya saya membuangnya dan memulai lagi dengan beberapa bahasa lain atau kombinasi bahasa lain.
Saya bisa melanjutkan tapi saya rasa saya sudah menjelaskan maksud saya sekarang. Semua ini membuat saya merasa tidak produktif ketika saya memprogram dalam C ++ dan membuat saya kehilangan kepercayaan pada kebenaran kode saya sendiri yang berarti saya tidak akan menggunakannya lagi, sementara saya masih menggunakan dan mengandalkan kode C yang saya tulis lebih dari 20 bertahun-tahun lalu. Mungkin hanya karena saya bukan pemrogram C ++ yang baik, atau mungkin karena cukup pandai dalam C dan bahasa lain memungkinkan saya untuk mengenali betapa lamer saya sebenarnya dalam hal C ++, dan bahwa saya tidak akan pernah bisa memahaminya sepenuhnya .
Hidup ini singkat...
sumber
Dalam lingkungan tertanam tingkat rendah beberapa "insinyur perangkat lunak" akan memiliki latar belakang EE dan hampir tidak menguasai C. C ++ lebih kompleks dan beberapa orang ini hanya takut untuk belajar bahasa baru. Jadi C digunakan sebagai penyebut persekutuan terendah. (Sebelum Anda menyarankan untuk menyingkirkan orang-orang ini, mereka setidaknya sama pentingnya dengan jurusan CS yang tidak memahami hal-hal analog hardcore.)
Berbicara dari pengalaman dalam mewarisi dan memelihara keduanya: desain yang mengerikan di C sulit untuk dipahami, dilepas, dan direfraktor menjadi sesuatu yang dapat digunakan.
Desain yang mengerikan di C ++ jauh lebih buruk karena lapisan abstraksi acak membuat otak Anda berputar-putar di sekitar basis kode mencoba mencari tahu kode mana yang akan dieksekusi dalam keadaan apa.
Jika saya harus bekerja dengan insinyur yang saya tahu tidak akan menghasilkan desain yang bagus, saya lebih memilih yang pertama daripada yang terakhir.
sumber
Saya tidak melihat alasan apa pun selain ketidaksukaan pribadi, bahkan untuk pemrograman sistem tertanam dan hal-hal serupa. Di C ++ Anda hanya membayar biaya tambahan untuk fitur yang Anda gunakan. Anda dapat menggunakan subset C dari C ++ dalam beberapa situasi tertentu saat overhead C ++ terlalu tinggi untuk Anda. Ini mengatakan, saya pikir beberapa programmer C melebih-lebihkan overhead dari beberapa konstruksi C ++. Izinkan saya membuat daftar beberapa contoh:
Salah satu alasan yang valid adalah ketika Anda memprogram untuk platform yang tidak memiliki compiler C ++ yang layak (tidak ada compiler C ++ sama sekali, atau compiler ada, tetapi diimplementasikan dengan buruk dan membebankan overhead tinggi yang tidak perlu untuk beberapa fitur C ++).
sumber
Mengapa membatasi berbicara dalam bahasa Inggris? Mungkin Anda akan menjadi penulis yang lebih kreatif dalam bahasa Serbia.
Itu argumen yang sama, dengan kesalahan yang jelas. Jika Anda memiliki tugas, dan alat yang nyaman Anda menyelesaikan tugas secara efisien, Anda kemungkinan besar akan menggunakan alat yang nyaman untuk alasan yang baik.
sumber
C ++ memiliki kurva belajar yang lebih lama. C hanya memiliki beberapa konstruksi yang perlu Anda ketahui dan kemudian Anda dapat mulai membuat kode perangkat lunak yang kuat. Dalam C ++ Anda perlu mempelajari basis C, kemudian OO dan pemrograman generik, pengecualian, dll. Dan setelah beberapa waktu Anda mungkin mengetahui sebagian besar fitur dan Anda mungkin dapat menggunakannya, tetapi Anda masih tidak tahu bagaimana kompilator akan menerjemahkan mereka, overhead implisit apa yang mereka miliki atau tidak. Ini membutuhkan banyak waktu dan tenaga.
Untuk proyek profesional, argumen ini mungkin tidak dihitung, karena Anda dapat mempekerjakan orang yang sudah mengetahui C ++ dengan sangat baik. Tapi di Proyek Sumber Terbuka, di mana C masih digunakan secara luas, orang-orang memilih bahasa yang mereka suka dan mereka dapat menggunakannya. Pertimbangkan bahwa tidak semua pemrogram OS adalah pemrogram profesional.
sumber
Saya ingin menindaklanjuti jawaban Dan Olson. Saya percaya bahwa orang takut akan fitur C ++ yang berpotensi berbahaya dan kontraproduktif, dan hal itu dapat dibenarkan. Namun tidak seperti yang Dan katakan, saya tidak berpikir bahwa memutuskan standar pengkodean saja tidak efektif, karena dua alasan:
Saya pikir alasan kedua di sini jauh lebih penting daripada yang pertama, karena menentukan standar pengkodean dapat dengan mudah menjadi masalah politik dan dapat direvisi nanti. Pertimbangkan kasus sederhana berikut:
(Alternatif bahwa standar tidak direvisi pada langkah 3 secara empiris terlalu mustahil untuk dipertimbangkan dan toh tidak akan jauh lebih baik.)
Meskipun saya biasa menggunakan C ++ untuk hampir semua hal beberapa tahun yang lalu, saya mulai merasa bahwa C lebih disukai dalam tugas tingkat rendah yang perlu ditangani oleh C atau C ++ dan yang lainnya harus dilakukan di tempat lain. bahasa sepenuhnya. (Hanya kemungkinan pengecualian untuk beberapa domain bermasalah berkinerja tinggi tertentu, wrt. Blitz ++ )
sumber
Saya menggunakan C, atau setidaknya mengekspor antarmuka C ketika saya menulis kode perpustakaan.
Saya tidak ingin kerepotan ABI yang tidak jelas.
sumber
Saya belum pernah melihat argumen untuk menggunakan C di atas C ++ yang saya anggap meyakinkan. Saya pikir kebanyakan orang takut dengan fitur tertentu yang ditawarkan C ++, seringkali dapat dibenarkan. Namun ini tidak meyakinkan saya karena seseorang dapat memaksakan apakah akan menggunakan fitur tertentu melalui standar pengkodean atau tidak. Bahkan di C, ada banyak hal yang ingin Anda hindari. Membuang C ++ sepenuhnya pada dasarnya berarti mengatakan bahwa ia tidak menawarkan manfaat nyata atas C yang akan membantu seseorang menulis kode yang lebih baik, yang merupakan pandangan yang saya anggap cukup bodoh.
Selain itu, orang sepertinya selalu mengangkat situasi platform di mana tidak ada kompiler C ++. Tentu C akan cocok di sini, tetapi saya pikir Anda akan kesulitan menemukan platform seperti itu akhir-akhir ini.
sumber
Satu hal yang belum saya lihat dimunculkan, yang menurut saya paling penting:
Sebagian besar perpustakaan yang saya gunakan setiap hari adalah perpustakaan C dengan ikatan untuk Python, Ruby, Perl, Java, dll. Dari apa yang saya lihat, jauh lebih mudah untuk membungkus perpustakaan C dengan 19 ikatan bahasa yang berbeda daripada bungkus pustaka C ++.
Misalnya, saya belajar Kairo sekali, dan sejak itu menggunakannya dalam 3 atau 4 bahasa yang berbeda. Kemenangan Besar! Saya lebih suka menulis program yang dapat digunakan lagi di masa mendatang, dan menulis program yang dapat dengan mudah diadopsi ke bahasa pemrograman lain adalah kasus ekstrim dari ini.
Saya tahu itu mungkin untuk mengikat perpustakaan C ++, tetapi AFAICT itu tidak sama. Saya telah menggunakan Qt (v3 dan v4) dalam bahasa lain dan itu tidak terlalu bagus untuk digunakan: mereka merasa seperti menulis C ++ dalam beberapa bahasa lain, tidak seperti perpustakaan asli. (Anda harus melewati tanda-tanda metode C ++ sebagai string!)
C ++ mungkin adalah bahasa yang lebih baik jika Anda menulis fungsi untuk digunakan sekali, atau jika menurut Anda seluruh dunia adalah C ++. C sepertinya bahasa yang lebih mudah jika Anda mendesain untuk portabilitas bahasa sejak awal.
sumber
Pengembangan kernel Windows tidak mendukung c ++ (sayangnya).
sumber
Anda dapat membaca kata-kata kasar yang menghibur tentang mengapa Linus Torvalds menyukai C di sini
sumber
Kode asli di mac adalah tujuan-c. Kode native pada PC adalah c (window.h) atau c ++ (mfc). Kedua lingkungan ini akan memungkinkan Anda menggunakan c dengan sedikit atau tanpa perubahan. Ketika saya ingin pustaka kode menjadi lintas platform dan sepertinya pilihan yang baik.
sumber
Saya dapat memikirkan beberapa alasan.
Mungkin tidak ada kompiler C ++ yang memuaskan. C ++ adalah bahasa yang jauh lebih besar, dan saya telah menjalankan kompiler C pada sistem yang tidak dapat menangani C ++ modern.
Penanya, atau orang yang bekerja dengannya, mungkin akrab dengan C tetapi tidak C ++.
Proyek ini mungkin dalam C. Meskipun dimungkinkan untuk menambahkan beberapa fitur C ++ ke C, itu dapat dengan mudah menyebabkan kekacauan yang tidak dapat diperbaiki. Saya sarankan memilih satu bahasa atau yang lain (biasanya C ++, jika praktis).
Penanya mungkin memiliki pandangan lama tentang kurva belajar C ++. (Ketika didekati dengan benar, itu lebih mudah daripada C. Kebanyakan buku pengantar yang pernah saya lihat tidak mendekati dengan benar.)
Ingatlah bahwa C dan C ++ adalah dua bahasa yang berbeda, dan semakin lama semakin berbeda. Membuat kode pada keduanya sekaligus adalah ide yang buruk, dan menggunakan subset seperti C dari C ++ kehilangan sebagian besar keuntungan dari C ++.
sumber
Jika Anda bekerja di lingkungan dengan dua bahasa, Anda mungkin menggunakan C untuk beberapa fungsi tingkat rendah yang penting kinerja dan bahasa tingkat tinggi yang lebih fungsional / tinggi seperti C # / Java untuk logika bisnis. Jika kode C ++ digunakan untuk fungsi-fungsi ini, C-Wrappers diperlukan untuk JNI / kode tidak terkelola di sekitarnya dan ini membuat segalanya lebih kompleks daripada hanya menggunakan C.
sumber
Saya menggunakan C ++ dengan pemrograman C karena dua alasan:
vector
danstring
untuk menyingkirkan manajemen memori array darikuJadi C benar-benar meminjam beberapa c ++ tetapi menggunakan kompiler c ++ sebanyak yang saya bisa. Seperti yang dikatakan orang lain dalam jawaban, saya menemukan sekarang saya benar-benar mengambil lebih banyak C ++ dengan cara ini dan di mana C akan terlalu melibatkan, saya menggunakan C ++. Monitor / Lock menggunakan RAII adalah salah satu yang saya gunakan baru-baru ini ketika berhadapan dengan program multi-threaded dan konstruksi serupa lainnya untuk membuka / menutup file.
sumber
Saya rasa C lebih portabel. Saya melakukan beberapa pekerjaan sekitar 5 tahun yang lalu mem-port kode ke banyak rasa unix (AIX, Irix, HPUX, Linux). Kode C mudah untuk dikirim tetapi kami mengalami berbagai masalah dalam mem-port beberapa kode C ++. Mungkin itu hanya lingkungan pengembangan yang belum matang tetapi saya lebih suka menggunakan C daripada C ++ karena alasan ini ...
sumber
C adalah bahasa sederhana, C ++ bukan. Bagi banyak orang, C ++ terlalu rumit untuk dikuasai sepenuhnya, lihat http://en.wikipedia.org/wiki/C%2B%2B#Criticism .
Karena kerumitannya, programmer yang berbeda biasanya hanya menguasai subset bahasa yang berbeda. Itu membuat membaca kode orang lain menyakitkan.
Kompleksitas, kesulitan bahasa menambah terlalu banyak gangguan, dan terkadang merusak produktivitas. Alih-alih fokus pada pekerjaan itu sendiri, saya sering mendapati diri saya berkelahi dengan bahasa itu sendiri. Java / python adalah alternatif yang lebih produktif.
Men-debug kode C yang rusak biasanya jauh lebih mudah daripada men-debug kode C ++ yang rusak.
Tidak seperti Java / C #, pustaka standar C ++ mencapai sedikit di luar cakupan pustaka standar C.
Beberapa programmer terkenal seperti Linus Torvalds (Linux) dan Richard Stallman (Emacs) tidak menyukai C ++.
sumber
Kebanyakan pemrogram menerima begitu saja bahwa setiap orang menganggap kualitas sebagai prioritas tinggi. Itu tidak selalu terjadi. Jika Anda terbiasa dengan C, C ++ mungkin tampak terlalu banyak membantu Anda di belakang layar. Ketelitian pemeriksaan tipe di C ++ mungkin juga tampak membatasi. Banyak orang bersedia mengambil risiko dengan memperkenalkan jenis bug yang dapat dicegah oleh C ++ untuk menghindari "gangguan" ini.
sumber
Ada tiga alasan yang bisa saya pikirkan. Salah satunya adalah bahwa C lebih cocok untuk sistem tertanam, karena ukuran binernya yang kecil dan ketersediaan kompiler C yang lebih luas pada sistem apa pun. Yang kedua adalah portabilitas: C adalah bahasa yang lebih kecil, dan kode ANSI C akan dikompilasi di mana saja. Lebih mudah untuk memecahkan portabilitas di C ++. Yang terakhir adalah bahasanya sendiri. C ++ lebih sulit, dan jelas merupakan bahasa yang didesain dengan sangat buruk. Keluhan Torvalds dilaporkan di atas. Anda mungkin juga ingin melihat C ++ Jawaban yang Sering Ditanyakan ( http://yosefk.com/c++fqa/ ).
sumber
Portabilitas mungkin menjadi masalah. Berbeda dengan jawaban Gordon Carpenter-Thomp, saya menyarankan bahwa ini lebih merupakan dukungan runtime dari versi yang berbeda dari libstdc ++ pada versi linux / unix yang berbeda. Lihat tautan ini untuk diskusi yang bagus tentang ini. Sedikit kutipan:
sumber
Saya dapat mengikuti banyak saran di sini di kedua arah. Tetapi pada akhirnya itu turun ke a) sederhana yang sebanding b) kompleks yang sebanding.
Saya tidak tahu apakah seseorang telah "menemukan" semacam pengukuran kompleksitas bahasa.
Pada skala dari 0 - 10 saya mungkin akan menilai C pada 2 atau 3 sedangkan C ++ akan berada di antara 8-10. Saya berpendapat C ++ adalah salah satu bahasa yang paling kompleks tetapi saya tidak tahu misalnya Ada, PL1 atau sejenisnya, jadi mungkin itu tidak terlalu rumit dibandingkan dengan beberapa bahasa lain.
C ++ mewarisi semua kompleksitas C sehingga tidak boleh di bawah tingkat kompleksitas C.
Saya sendiri akan jauh lebih nyaman menggunakan beberapa bahasa skrip dan C. Jadi pada akhirnya kita harus menjawab pertanyaan berikut. "Apakah lebih banyak selalu lebih baik?"
sumber
Hal paling berguna yang saya temukan di C adalah kurangnya ruang nama dan kelebihan beban: nama fungsi dan simbol adalah pengenal unik. Untuk menemukan tempat di mana simbol-simbol ini digunakan, Anda bisa saja
grep
melalui file kode sumber dan hasil pencarian akan menunjukkan lokasinya.Ini penting saat memasang kabel di fitur atau komponen baru ke sistem lama dan kusut.
Anda tidak dapat melakukan ini dengan mudah di C ++, tanpa alat pembuat grafik panggilan yang canggih.
sumber
Kebanyakan orang tampaknya berpikir bahwa C dan C ++ terkait, tetapi sayangnya mereka salah. C ++ adalah bahasa yang sama sekali berbeda dari C.
Dalam C ++, Anda berpikir dalam istilah objek dan bagaimana mereka terkait satu sama lain. Di C, Anda berpikir dalam istilah API. Ini seperti perbedaan antara hari dan 17.
Sebuah analogi yang buruk: jika seseorang menambahkan bahasa Mandarin ke bahasa Inggris dan menyebutnya bahasa Inggris ++, Anda mungkin tidak akan merasa nyaman untuk menambahkan baris bahasa Mandarin ke surat cinta terbaru Anda, karena jauh lebih mudah untuk mengungkapkan cinta di bagian bahasa Inggris ++ ini.
sumber
Berikut ini adalah semua alasan mengapa mungkin bermanfaat untuk membatasi proyek ke C:
sumber