Apa batasan C ++ dibandingkan bahasa C? [Tutup]


116

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.


12
Tidak peduli apakah pertanyaan ini dimaksudkan untuk menjadi argumentatif atau tidak, tetap saja. Pilihan bahasa untuk sebuah proyek adalah: sebuah pilihan.
Bombe

7
@bombe, bukankah kita seharusnya membahas cara membuat pilihan berdasarkan informasi?



10
Bukankah ironis ketika Anda memberikan saran kepada programmer C untuk pindah ke C ++ bahwa mereka akan menerima ide Anda, seperti halnya Anda, jika programmer C mengatakan kepada Anda bahwa Anda harus meninggalkan C ++ dan pindah ke C?
Warren P

Jawaban:


136

Ini dipicu oleh jawaban yang saya berikan untuk pertanyaan saat ini yang menanyakan tentang pustaka generik untuk C - penanya secara khusus menyatakan bahwa mereka tidak ingin menggunakan C ++.

C adalah bahasa pemrograman yang lengkap. C bukanlah subset sembarang dari C ++. C sama sekali bukan bagian dari C ++.

Ini adalah C yang valid:

foo_t* foo = malloc ( sizeof(foo_t) );

Untuk membuatnya dikompilasi sebagai C ++ Anda harus menulis:

foo_t* foo = static_cast<foo_t*>( malloc ( sizeof(foo_t) ) );

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=c99untuk g++:

sandiego:$ g++ -g  -O1 -pedantic -mfpmath=sse -DUSE_SSE2 -DUSE_XMM3  -I src/core -L /usr/lib -DARCH=elf64 -D_BSD_SOURCE -DPOSIX -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112L -Wall -Wextra -Wwrite-strings -Wredundant-decls -Werror -Isrc  src/core/kin_object.c -c -o obj/kin_object.o | wc -l
In file included from src/core/kin_object.c:22:
src/core/kin_object.h:791:28: error: anonymous variadic macros were introduced in C99
In file included from src/core/kin_object.c:26:
src/core/kin_log.h:42:42: error: anonymous variadic macros were introduced in C99
src/core/kin_log.h:94:29: error: anonymous variadic macros were introduced in C99
...
cc1plus: warnings being treated as errors
src/core/kin_object.c:101: error: ISO C++ does not support the z printf length modifier
..
src/core/kin_object.c:160: error: invalid conversion from void*’ to kin_object_t*’
..
src/core/kin_object.c:227: error: unused parameter restrict
..
src/core/kin_object.c:271: error: ISO C++ does not support the z printf length modifier
src/core/kin_object.c:271: error: ISO C++ does not support the z printf length modifier

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

[a] Kompiler C hampir pasti merupakan kompilator C ++, jadi tidak ada implikasi biaya perangkat lunak

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.


21
Iya. Pemain C-style cukup biasa saat Anda menggunakan malloc. Saat menggunakan malloc, Anda melakukannya tetap dalam subset c. Jika Anda ingin memprogram gaya C ++, Anda akan menggunakan operator new, bukan static_cast + malloc.
Suma

33
Mengatakan bahwa C bukan bagian dari C ++ adalah hal yang terlalu berlebihan. Tentu, Anda dapat mengatakan bahwa struct apa pun dengan anggota yang disebut "class" tidak akan dikompilasi, tetapi sebenarnya hanya modifikasi kecil yang diperlukan, dan sebagian besar kompiler memiliki opsi untuk menambahkan beberapa fitur C-only ke C ++.
Kaz Dragon

27
Sejauh contoh malloc Anda, menambahkan cast tidak hanya dijauhi oleh programmer C ++, tetapi juga (terutama) oleh programmer C. Ada alasan bagus untuk tidak memasukkan pemeran dalam kode C. Ini tidak perlu, dan menambahkannya dapat menyembunyikan kesalahan. Jadi ya, perlakukan mereka sebagai dua bahasa yang berbeda. +1 :)
jalf

26
@BlueRaja Bayangkan jika Guido telah memutuskan untuk tidak menambahkan objek ke bahasa skripnya, dan dua grup telah membuat garpu Python yang saling tidak kompatibel untuk menambahkan objek, satu dengan model objek berdasarkan Smalltalk, yang lain dengan sistem kelas berdasarkan Simula. Kemudian Guido terus meningkatkan Python yang memfokuskan penggunaan intinya. Itu lebih dekat dengan situasi C / Objective C / C ++.
Pete Kirkham

11
@BlueRaja: Mereka adalah dua bahasa berbeda yang memiliki inti umum yang cukup besar. Jika Anda memprogram dalam inti umum itu, Anda akan berakhir melakukan hal-hal yang bukan kode yang baik dalam kedua bahasa tersebut. Pilih satu bahasa untuk menulis program tertentu, dan buatlah itu bagus dalam bahasa itu.
David Thornley

115

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.


24
Saya menggunakan C ++ selama beberapa tahun dan masih menghabiskan 50% waktu saya refactoring kode menjadi "C ++ benar". Ini mimpi buruk, seperti katamu.
Kai

12
Anda selalu bisa melakukannya dengan benar pada kali pertama. Menambahkan konstanta tidaklah sulit.
GManNickG

14
Saya menggunakan C ++ selama sepuluh tahun, dan kembali ke C (untuk sistem tertanam dalam kasus saya) adalah hal terbaik yang pernah saya lakukan.
Warren P

Saya suka jawaban ini. Anda telah memakukan perasaan saya juga. Saya sudah bertahun-tahun bekerja sebagai pengembang C ++, pekerjaan harian saya masih C ++. Tapi itu tidak berarti saya suka bahasanya, saya melihat keindahan dalam C.
Matt Joiner

10
1, Karena ini saya menemukan bahwa setiap kali saya menulis C ++ saya akhirnya menghabiskan jauh lebih banyak waktu debugging dan membenturkan kepala saya terhadap permukaan keras daripada ketika saya kode C . Sangat setuju dengan Anda. Jawaban terbaik. :)
ApprenticeHacker

58

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?


2
Baik. Saya telah melihat kompiler c untuk pengontrol mikro 8 bit.
dmckee --- mantan moderator anak kucing

6
tentu saja. Sebagian besar, jika tidak semua chip 8-bit memiliki kompiler C hari ini.
Eli Bendersky

gbdk.sourceforge.net - GBDK untuk satu ..
Kelden Cowan

+1 ini adalah jawaban yang benar. Kompiler C ++ jauh lebih sulit untuk ditulis daripada kompiler C, sebagian besar karena kompleksitas (multiple-) inheritance.
BlueRaja - Danny Pflughoeft

9
@BlueRaja: dibandingkan dengan template ... multiple-inheritance mungkin bukan penghalang sebenarnya di sini. Bagaimanapun, templat merupakan bahasa mereka sendiri yang lengkap.
Matthieu M.

49

Saya benci pemrograman dalam C ++.


6
Lol Saya suka yang itu
Tamas Czinege

30
Sangat meyakinkan! Saya berpikir untuk beralih ke Python berdasarkan argumen Anda.
Jimmy J

8
Mungkin tidak meyakinkan, tapi itu alasan sebenarnya.
Georg Schölly

@Jimmy J: Python itu luar biasa. Itu yang terbaik dari Unix, C dan semua fitur bahasa "modern" Anda dilakukan dengan benar. Jika Anda memiliki masalah kinerja, Python ingin Anda masuk ke C, dan melakukannya dengan mudah.
Matt Joiner

2
@Georg: Saya akui saya belum pernah melihat-lihat, saya sangat terkesan dengan Python.
Matt Joiner

38

Beberapa alasan mungkin:

  • Kurangnya dukungan - Tidak semua kompilator C juga merupakan kompilator C ++. Tidak semua kompiler secara khusus sesuai dengan standar, meskipun mereka mengklaim mendukung C ++. Dan beberapa kompiler C ++ menghasilkan kode yang sangat membengkak dan tidak efisien. Beberapa kompiler memiliki implementasi yang buruk dari pustaka standar. Pengembangan mode kernel umumnya tidak memungkinkan penggunaan pustaka standar C ++, serta beberapa fitur bahasa. Anda masih dapat menulis kode C ++ jika Anda tetap berpegang pada inti bahasa, tetapi akan lebih mudah untuk beralih ke C.
  • Keakraban. C ++ adalah bahasa yang kompleks. Lebih mudah untuk mengajari seseorang tentang C daripada C ++, dan lebih mudah untuk menemukan pemrogram C yang baik daripada pemrogram C ++ yang baik. (kata kunci di sini adalah "baik". Ada banyak programmer C ++, tetapi kebanyakan dari mereka belum mempelajari bahasa dengan benar)
  • Kurva pembelajaran - Seperti di atas, mengajar seseorang C ++ adalah tugas yang sangat besar. Jika Anda menulis aplikasi yang harus dikelola oleh orang lain di masa mendatang, dan yang lain ini mungkin bukan pemrogram C ++, menulisnya dalam C membuatnya lebih mudah untuk dipahami.

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.


4
Saya akan menambahkan bahwa kode C mengkompilasi jauh lebih cepat daripada C ++. Sebuah proyek besar di perusahaan kami (lebih dari satu juta baris) mengumpulkan kurang dari 30 detik.
Calmarius

31

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.


8
Jangan tersinggung, tetapi mungkin juga bergantung pada pendapat Anda tentang C ++. Warisan adalah sesuatu yang saya kaitkan lebih banyak dengan Java daripada C ++, dan jika Anda memperlakukan C ++ secara ketat sebagai bahasa OOP á la Java (C dengan kelas), maka saya setuju dengan Anda. Jika Anda tetap menggunakan rasa C ++ yang lebih modern, saya pikir itu lebih menyenangkan daripada C
jalf

11
Sekali lagi, saya tidak menganggap C ++ sebagai bahasa OO, dan itu tidak boleh diperlakukan sebagai satu bahasa. Saya pikir pemrograman generik adalah sifat yang lebih kuat dari C ++. Sebagian besar kode C ++ yang saya lihat tidak berusaha keras untuk menjadi "OO", atau berisi kode yang tidak perlu. Ini sering lebih ramping daripada kode C yang setara
jalf

3
@ JALF: ​​Hal lain yang saya temukan bisa menjadi gangguan "selalu ada cara yang lebih baik" di C ++ adalah menggeneralisasi hal-hal dengan template. "Mungkin kita harus membiarkan pengguna kelas ini memutuskan tipe integer dasar apa yang akan digunakan?" Tetapi Anda mungkin tidak membutuhkannya , dan di C Anda tidak akan repot. Dan kadang-kadang saya menemukan diri saya berpikir, "Kita harus benar-benar menyediakan antarmuka iterator maju ke kelas ini," ketika di C Anda hanya akan mengekspos pointer ke elemen pertama dan hitungan, atau (ketinggian fanciness!) Fungsi yang mengambil a penunjuk fungsi panggilan balik.
j_random_hacker

2
Saya merasa mundur selangkah ketika coding dalam C ++ membantu. Tentukan tujuan, dan tulislah ke arahnya (gaya C). Faktor dalam C ++ isme saat kegunaannya menjadi jelas.
Matt Joiner

2
infinite gunfire, ooh ya, sangat benar. Kaki kami benar-benar gemetar :)
quetzalcoatl

27

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...


2
+1, sangat setuju.
missingfaktor

2
Ini terdengar sangat sejalan dengan argumen Linus. (Kurang dari konteks objek = lebih mudah untuk dipahami.)
Warren P

20

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.


Amin, saudara. Setelah bekerja dengan sumber C yang diproduksi oleh insinyur perangkat keras, saya ngeri memikirkan apa yang akan saya hadapi jika mereka melakukannya dalam C ++.
Richard Chambers

19

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:

  • Kelas dan fungsi anggota memiliki overhead nol dibandingkan dengan fungsi normal (kecuali Anda menggunakan fungsi virtual, dalam hal ini tidak ada biaya tambahan dibandingkan dengan menggunakan fungsi pointer)
  • Template memiliki overhead yang sangat sedikit (paling sering tidak ada overhead sama sekali)

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 ++).


3
Kelas dengan fungsi virtual memiliki lebih banyak overhead: setiap instance harus membawa bidang tambahan untuk mengidentifikasi jenisnya.
bstpierre

6
Lebih banyak overhead dari apa? Jenis tersebut dilakukan di vtbl. Jika Anda menerapkan mekanisme serupa menggunakan penunjuk fungsi, Anda memerlukan setidaknya satu penunjuk (atau indeks, atau apa pun) untuk memilih penunjuk fungsi yang ingin Anda gunakan.
Suma

3
bstpierre: Saya pikir apa yang Suma katakan adalah: bahwa ia tidak memiliki overhead lebih dari mengimplementasikan fitur secara manual sendiri di C.
Martin York

2
Sebuah pointer ke kelas vtable disimpan di setiap instance kelas.
tstenner

5
Ada overhead, tapi yang saya maksud adalah jika Anda menginginkan resolusi tipe dinamis, Anda memerlukan beberapa penyimpanan untuk mengidentifikasi tipe, bahkan di C. Jika Anda tidak menginginkan tipe dinamis, Anda tidak perlu membayar biaya overhead ( jangan gunakan fungsi virtual jika Anda tidak membutuhkannya).
Suma

13

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.


3
Jika saya fasih berbahasa Inggris dan lancar dalam bahasa Serbia, saya yakin saya akan lebih kreatif. Apakah Anda tidak setuju?

2
@Neil memang, tetapi upaya yang diperlukan untuk belajar bahasa Serbia mungkin tidak dapat dibenarkan untuk menyelesaikan blok kreativitas saya saat ini.
ramping

2
Saya pikir Arno menyoroti fakta bahwa Anda tidak menulis untuk CPU, Anda menulis untuk rekan kerja Anda untuk dibaca, dan perpustakaan Anda yang lain untuk ditautkan, dan seterusnya. Lagipula, jika saya hanya ingin ekspresif dan kecepatan, saya akan menulis di OCaml.
Ken

10

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.


1
Erm ... tidak? Anda mempelajari basis C (mungkin dengan pengecualian array dan penanganan string gaya-C yang digantikan <vector> dan <string>), dan Anda mulai. Anda dapat mengambil semuanya sambil jalan. Anda tidak perlu tahu apa-apa tentang OO, GP, atau pengecualian untuk memulai dengan C ++ ...
DevSolar

4
C mungkin "lebih kecil" tetapi dalam jangka panjang tidak mudah digunakan. Manajemen memori manual? Tidak, terima kasih.
Jimmy J

7
Tidak ada yang namanya manajemen memori otomatis di C ++.
Warren P

3
C ++ tidak menyelesaikan masalah manajemen memori. Tepat ketika Anda mengira Anda telah menangani pointer, C ++ pergi dan menambahkan model pengecualian yang mengerikan. Datanglah ke tanah C99, Kecuali untuk struktur datanya, saya cukup yakin saya hampir tidak menyentuh malloc. Bahkan kemudian saya bisa "merangkum" beberapa panggilan malloc. Ini banyak cerita yang sama di C ++ (manajemen memori implisit, hanya dilakukan di heap dan bukan tumpukan), hanya dengan semua jazz penunjuk cerdas.
Matt Joiner

1
@ereOn: Memang benar, komentar yang saya tulis 3 tahun yang lalu tidak berlaku lagi. :)
Matt Joiner

10

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:

  1. Standar pengkodean bisa sulit untuk diterapkan secara ketat
  2. Sangat sulit untuk mendapatkan ide yang bagus.

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:

  1. Anda diizinkan menggunakan penampung stl, tetapi tidak boleh menggunakan kerangka di kode Anda sendiri.
  2. Orang-orang mulai mengeluh bahwa mereka akan lebih produktif jika mereka diizinkan untuk membuat kode kelas template ini atau itu.
  3. Standar pengkodean direvisi untuk memungkinkan itu.
  4. Geser kemiringan ke standar pengkodean yang terlalu rumit yang tidak diikuti oleh siapa pun dan gunakan jenis kode berbahaya yang seharusnya dicegah oleh standar, dikombinasikan dengan birokrasi yang berlebihan di sekitar standar.

(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 ++ )


10

Saya menggunakan C, atau setidaknya mengekspor antarmuka C ketika saya menulis kode perpustakaan.

Saya tidak ingin kerepotan ABI yang tidak jelas.


Sama. C yang ketat hanya untuk antarmuka. Hal terakhir yang saya inginkan adalah kerangka objek konyol orang lain yang mendorong saya.
Matt Joiner

9

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.


3
Setuju, kata-kata kasar "C is better than C ++" tidak pernah tahan terhadap pengawasan.
Jimmy J

6
Saya percaya C ++ menawarkan kepada saya manfaat yang SANGAT SEDIKIT, dan BIAYA SAYA sejumlah besar kerumitan yang tidak disengaja. Saya yakin dibutuhkan sekitar 1500 halaman buku teks C ++, dan sepuluh tahun upaya, untuk menjadi mahir dalam C ++ seperti saat ini saya di C, Pascal, Python, dan Objective-C. Masing-masing bahasa di atas sekitar 20x lebih ortogonal, ringkas, dan nyaman secara mental untuk digunakan, belum lagi lebih kuat, di lingkungan tempat saya menggunakannya. Ada TIDAK ada penggunaan yang dapat dibenarkan secara rasional untuk C ++ di lingkungan pengembangan saya yang biasa.
Warren P

@Warren Anda hanya membayar apa yang Anda gunakan, seperti bahasa apa pun. Jika Anda tidak dapat memutuskan cara membuat kode dengan bijak dalam C ++, itu terserah Anda, bukan bahasanya.
Dan Olson

2
Tidak begitu. Jika Anda adalah satu-satunya pengembang di sebuah proyek, mungkin memang begitu. Tapi begitu kami memiliki dua pengembang, kami bertempur. Apa? Anda bersikeras menggunakan wadah IoC, sedangkan saya lebih suka cara lain untuk melakukan delegasi ... Anda menyukai tiga tingkat templat bersarang, dan saya lebih suka tanpa templat. Berantakan.
Warren P

Saya tahu posting ini berumur 10 tahun tetapi apakah adil untuk membandingkan C dan C ++ lagi? Keduanya adalah bahasa yang terpisah dan berbeda (sejak C99) dan keduanya memiliki kelebihan dan kekurangan yang dicakup masing-masing. C ++ sulit untuk di-debug dan dipelihara? Ketelitian C memungkinkan Anda melakukan debug dengan lebih baik. C tidak punya obat generik? C ++ memiliki obat generik! Pada saat ini, tidak ada bahasa yang lebih baik dari yang lain.
Nergal

9

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.


The "metode lulus sebagai string!" Hal tersebut merupakan cacat dari Qt, bukan C ++. Anda sebenarnya bisa memiliki mekanisme bodoh yang sama dengan kerangka C yang Anda inginkan. Bahkan orang-orang di Qt setuju bahwa melakukan itu adalah kesalahan. Tidak ada alternatif yang lebih baik dalam pikiran mereka pada saat itu dan sudah terlambat untuk mengubahnya kembali ketika mereka menyadarinya.
sebelum tanggal

7

Pengembangan kernel Windows tidak mendukung c ++ (sayangnya).


Bagaimana itu? Mengapa? Apakah biner yang dihasilkan dari kompilator C ++ berbeda dari kompilator C? Bukankah pengembangan driver hanya mengikuti API?
Dave Van den Eynde

4
Karena banyak fitur C ++ memerlukan dukungan runtime yang mungkin tidak mudah untuk diterapkan dalam mode kernel. Untuk satu hal, fungsi alokasi memori yang berbeda digunakan, jadi potongan pustaka standar harus diganti. Pengecualian umumnya juga buruk.
jalf

3
Saya akan menambahkan bahwa Linux Torvalds untungnya membakar setiap kemungkinan C ++ di Linux karena lebih banyak alasan daripada pengecualian. Ada beberapa OS dalam bahasa lain: Java, C ++, assembler. Hanya assembler yang bertahan dengan penggunaan yang wajar.
Matt Joiner


Perhatikan itu untuk Visual Studio 2015?
LegendLength

6

Anda dapat membaca kata-kata kasar yang menghibur tentang mengapa Linus Torvalds menyukai C di sini


6
Ini lebih merupakan kata-kata kasar setengah koheren terhadap desain berorientasi objek daripada kata-kata kasar terhadap C ++.
Dan Olson

16
Tuan Torvalds memiliki daftar panjang tentang hal-hal yang tidak dia sukai, C ++, emacs, Subversion, OO dan masih banyak lagi. Seseorang terkadang berharap dia akan mengancingkan bibirnya sedikit lagi

11
Linus suka mengomel dan mencoba memprovokasi dan membuat marah orang. Sayangnya, dia tidak belajar C ++ sebelum menyatakan bahwa itu menyebalkan. Sayangnya, pengikut kultusnya percaya bahwa semua yang dia katakan pasti benar.
jalf

9
Hubungannya lebih untuk hiburan daripada pendidikan
Paul Dixon

6
Bukti bahwa bahkan orang jenius pun terkadang bisa menjadi orang bodoh.
Kaz Dragon

5

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.


4

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 ++.


3

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.


3

Saya menggunakan C ++ dengan pemrograman C karena dua alasan:

  • vectordan stringuntuk menyingkirkan manajemen memori array dariku
  • jenis pemeriksaan dan pemeran yang ketat untuk memperingatkan dan / atau menangkap semua gangguan yang akan saya lewatkan jika tidak.

Jadi 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.


3

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 ...


1
Lima belas tahun yang lalu saya adalah pengembang utama untuk proyek C ++ yang menargetkan HPUX, AIX dan Solaris. Kami memiliki sangat sedikit masalah portabilitas C ++ - hampir semua yang kami miliki adalah dengan ketidakcocokan panggilan sistem C.

1
Kurang dari sepuluh tahun yang lalu, saya mengerjakan proyek menggunakan HPUX, Solaris, dan Tru64, menggunakan kompiler tradisional. Nightlies kami tidak pernah dibangun. Saat kami menambahkan AIX, kami memutuskan untuk beralih ke C ++ standar.
David Thornley

Mungkin orang yang menulis kode Anda adalah pembuat kode yang lebih baik daripada omong kosong yang harus saya tangani :-)
Gordon Thompson

3
  1. 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 .

  2. Karena kerumitannya, programmer yang berbeda biasanya hanya menguasai subset bahasa yang berbeda. Itu membuat membaca kode orang lain menyakitkan.

  3. 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.

  4. Men-debug kode C yang rusak biasanya jauh lebih mudah daripada men-debug kode C ++ yang rusak.

  5. Tidak seperti Java / C #, pustaka standar C ++ mencapai sedikit di luar cakupan pustaka standar C.

  6. Beberapa programmer terkenal seperti Linus Torvalds (Linux) dan Richard Stallman (Emacs) tidak menyukai C ++.


3
Saya mempertimbangkan untuk memberi suara pada jawaban Anda hanya sampai saya membaca argumen # 6.
fuz

1

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.


1
Hmm, alasan saya beralih dari C ke C ++ (lama sekali) adalah untuk pengecekan tipe yang lebih ketat. Saya suka meminta kompiler menemukan kesalahan saya daripada pengguna mengalami dump inti.

1

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/ ).


5
Dan, jika Anda cerdas, setelah melihat FQA Anda akan menyadari bahwa ini adalah pekerjaan hack oleh seseorang yang tidak benar-benar mengerti C ++ tetapi tetap membencinya.
David Thornley

1

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:

Kode dukungan waktu proses yang digunakan oleh berbagai bagian aplikasi C ++ harus kompatibel. Jika satu bagian dari program perlu dynamic_cast atau menangkap objek yang disediakan oleh yang lain, kedua bagian harus menyetujui detail implementasi tertentu: cara menemukan vtables, cara melepas tumpukan, dan seterusnya.

Untuk C ++ dan beberapa bahasa lain yang didukung GCC dengan fitur serupa, detail tersebut ditentukan oleh C ++ ABI. Setiap kali ABI yang digunakan oleh GCC berubah, Anda akan mendapatkan pustaka yang tidak kompatibel yang dihasilkan oleh versi GCC yang berbeda. Hal yang sama berlaku untuk C biasa, tetapi C ABI jauh lebih sederhana dan sudah ada lebih lama sehingga cukup stabil.


1

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?"


1

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 sajagrep 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.


0

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.


0

Berikut ini adalah semua alasan mengapa mungkin bermanfaat untuk membatasi proyek ke C:

  • kompilasi lebih cepat karena bahasanya jauh lebih sederhana
  • memerlukan lebih sedikit dukungan waktu proses, membuatnya lebih cocok untuk lingkungan tingkat rendah
  • jauh lebih mudah untuk berinteraksi dengan bahasa lain
  • mendukung array berukuran variabel pada stack
  • lebih mudah untuk membaca kode assembly karena tidak ada nama mangling
  • memungkinkan kode yang dihasilkan oleh kompiler berbeda untuk digabungkan dengan mudah karena ini merupakan antarmuka biner aplikasi standar de facto
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.