Bagaimana C berbeda dari C ++?

21

Banyak orang mengatakan bahwa C ++ adalah bahasa yang sama sekali berbeda dari C, tetapi Bjarne sendiri mengatakan bahwa C ++ adalah bahasa yang diperluas dari C maka dari sanalah ++berasal. Jadi mengapa semua orang terus mengatakan bahwa C dan C ++ adalah bahasa yang sama sekali berbeda? Dalam hal apa C berbeda dari C ++ selain fitur-fitur tambahan dalam C ++?

Joshua Partogi
sumber
3
Karena cara mereka digunakan. Anda tentu dapat menulis C dalam C ++ ... tetapi Anda tidak seharusnya.
Ed S.

Jawaban:

18

Selama tahun 1980-an, ketika pengembangan C ++ baru saja dimulai, C ++ hampir merupakan superset dari C. Itulah awal mulanya.
Namun, seiring waktu, baik C dan C ++ berevolusi dan telah menyimpang dari satu sama lain, meskipun kompatibilitas antara bahasa selalu dianggap penting.

Selain itu, perbedaan teknis antara C dan C ++ telah membuat idiom khas dalam bahasa-bahasa tersebut dan apa yang dianggap sebagai 'praktik yang baik' semakin berbeda.

Ini adalah faktor pendorong di belakang orang mengatakan hal-hal seperti "tidak ada bahasa seperti C / C ++" atau "C dan C ++ adalah dua bahasa yang berbeda". Meskipun dimungkinkan untuk menulis program yang dapat diterima oleh kompiler C dan C ++, kode ini umumnya dianggap bukan contoh dari kode C yang baik atau contoh dari kode C ++ yang baik.

Bart van Ingen Schenau
sumber
Saya pikir paragraf pertama tidak benar. Saya percaya C selalu memiliki casting implisit dari void *tetapi C ++ tidak pernah melakukannya. (Tidak downvote)
alternatif
5
@mathepic: Tentukan "selalu". C mengambil void * type dari C ++. Di K&R C, malloc mengembalikan char *
Nemanja Trifunovic
19

Stroustrup sendiri menjawab itu dalam FAQ-nya :

C ++ adalah turunan langsung C yang mempertahankan hampir semua C sebagai himpunan bagian. C ++ menyediakan pengecekan tipe yang lebih kuat daripada C dan secara langsung mendukung rentang gaya pemrograman yang lebih luas daripada C. C ++ adalah "C yang lebih baik" dalam arti mendukung C gaya pemrograman yang dilakukan menggunakan C dengan pengecekan tipe yang lebih baik dan lebih banyak dukungan notasi (tanpa kehilangan efisiensi). Dalam pengertian yang sama, ANSI C adalah C yang lebih baik daripada K&R C. Selain itu, C ++ mendukung abstraksi data, pemrograman berorientasi objek, dan pemrograman generik.

Ini mendukung pemrograman berorientasi objek dan pemrograman generik yang membuat C ++ "sangat berbeda" dengan C. Anda hampir dapat menulis C murni dan kemudian mengompilasinya dengan kompiler C ++ (selama Anda menangani pengecekan tipe yang lebih ketat). Tapi kemudian Anda masih menulis C - Anda tidak menulis C ++.

Jika Anda menulis C ++, maka Anda memanfaatkannya berorientasi objek dan fitur template dan itu tidak seperti apa yang akan Anda lihat di C.

Dean Harding
sumber
"Tidak seperti apa yang akan kamu lihat di C." Ungkapan ini terdengar lucu! "lihat di C". Panglima tertinggi! Ini semacam puisi.
Galaxy
13

Sederhananya, apa yang dianggap idiomatik dalam C jelas bukan idiomatik dalam C ++.

C dan C ++ adalah bahasa yang sangat berbeda dalam praktiknya, karena cara orang menggunakannya. C bertujuan minimalisme, di mana C ++ adalah bahasa yang sangat kompleks, dengan banyak fitur.

Ada juga beberapa perbedaan praktis: C dapat dengan mudah dipanggil dari hampir semua bahasa, dan sering mendefinisikan ABI dari suatu platform, sedangkan C ++ cukup sulit untuk digunakan dari perpustakaan lain. Sebagian besar bahasa memiliki FFI atau antarmuka dalam C, bahkan bahasa diimplementasikan dalam C ++ (java, misalnya).

David Cournapeau
sumber
4
Bukan hanya kode C-style yang non-idiomatis dalam C ++. C-style coding sebenarnya bermasalah di C ++, karena kurangnya keamanan pengecualian.
dan04
4

Terlepas dari fakta yang jelas bahwa C ++ mendukung pemrograman berorientasi objek, saya pikir Anda punya jawaban di sini: http://en.wikipedia.org/wiki/Compatibility_of_C_and_C++

Artikel itu berisi contoh kode yang menunjukkan hal-hal yang ok di C tetapi tidak di C ++. Contohnya:

int *j = malloc(sizeof(int) * 5); /* Implicit conversion from void* to int* */

Porting program C ke C ++ seringkali langsung dan sebagian besar terdiri dari memperbaiki kesalahan kompilasi (menambahkan gips, kata kunci baru dll).

Martin Wickman
sumber
4
Porting program seperti itu tidak memberi Anda program C ++. Ini memberi Anda C yang dapat dikompilasi pada kompiler C ++. Itu tidak membuatnya C ++ (saya masih akan memanggil kode C yang dihasilkan (bahkan tidak C dengan kelas)).
Martin York
@MartinYork Sebut itu buruk C, tunjukkan semantik mungkin berbeda, dan saya setuju. Hasilnya jelas C.
Deduplicator
2

C ++ tidak hanya menambahkan fitur-fitur baru, tetapi juga konsep-konsep baru dan idiom-idiom baru ke C. Meskipun C ++ dan C saling berkaitan, faktanya tetap bahwa untuk menulis secara efektif dalam suatu bahasa, Anda harus berpikir dengan gaya bahasa itu. Bahkan kode C terbaik tidak dapat mengambil keuntungan dari kekuatan dan idiom yang berbeda dari C ++, dan karena itu lebih mungkin daripada kode C ++ yang sebenarnya tidak terlalu buruk .

Jon Purdy
sumber
2

"Fitur yang diperluas", Anda membuatnya terdengar seperti di C ++ yang mereka tambahkan seperti, makro variadic atau sesuatu dan hanya itu. "Fitur yang diperluas" dalam C ++ adalah perombakan total bahasa dan benar-benar menggantikan praktik C terbaik karena fitur C ++ baru jauh lebih baik daripada fitur C asli sehingga fitur C asli sepenuhnya dan benar-benar berlebihan dalam banyak kasus. . Menyarankan bahwa C ++ hanya memperluas C berarti bahwa tank tempur modern memperluas pisau lipat untuk keperluan berperang.

DeadMG
sumber
Bisakah Anda menyebutkan contoh salah satu fitur yang lebih bermanfaat yang tidak dimiliki C ++?
Dark Templar
2
@DarkTemplar: Bagaimana dengan manajemen sumber daya mode mudah dengan RAII? Atau struktur data generik yang bagus menggunakan templat? Untuk memulainya saja.
DeadMG
1

Perbedaannya adalah bahwa dalam C Anda berpikir secara prosedural dan dalam C ++ Anda berpikir dalam cara yang berorientasi objek. Bahasanya sangat mirip tetapi pendekatannya sangat berbeda.

Semut
sumber
Bukankah C juga memiliki struct? Bukankah C file sendiri modul terpisah (pada dasarnya, objek)? Tidak yakin apa perbedaan yang tepat antara prosedural dan berorientasi objek adalah ...
Dark Templar
1
Gelap kamu telah mengilustrasikan poin saya. Ini bukan batasan bahasa yang memungkinkan Anda menulis secara prosedural atau berorientasi objek, itu adalah etos atau cara berpikir.
Semut
0

Sementara C ++ dapat menjadi set super C dalam istilah sintaksis - yaitu setiap konstruk program C dapat dikompilasi oleh kompiler C ++.

Namun, Anda hampir tidak pernah menulis program C ++ seperti yang akan Anda lakukan dengan program C. Daftarnya bisa tak ada habisnya atau mungkin seseorang harus melakukan penelitian lebih lanjut untuk menempatkannya sebagai laporan lengkap. Namun, saya menempatkan beberapa petunjuk yang membuat perbedaan utama.

Inti dari posting saat ini adalah bahwa C ++ memiliki fitur berikut yang harus digunakan oleh programmer C ++ yang baik sebagai pemrograman praktik terbaik meskipun C yang setara dimungkinkan untuk dikompilasi.

Bagaimana seharusnya dilakukan di C ++ over C

  1. Kelas & Waris. Itulah perbedaan paling penting yang memungkinkan orientasi objek sistematis yang membuat ekspresi pemrograman sangat kuat. Saya kira - poin ini tidak perlu penjelasan yang lebih baik. Jika Anda menggunakan C ++ - hampir selalu, Anda lebih baik menggunakan kelas.

  2. Privatisasi - Kelas, dan bahkan struktur memiliki apa yang anggota pribadi. Ini memungkinkan enkapsulasi suatu kelas. Setara dalam C adalah dengan cara typecasting objek sebagai void * ke aplikasi sehingga aplikasi tidak memiliki akses ke variabel internal. Namun, di C ++ Anda dapat memiliki elemen dengan kelas publik dan privat.

  3. Lewati dengan referensi. C ++ memungkinkan modifikasi berdasarkan referensi, untuk itu diperlukan pointer yang lewat. Pass-by-reference menjaga kode tetap bersih dan lebih aman terhadap bahaya pointer. Anda juga lulus pointer gaya C dan itu berfungsi - tetapi jika Anda berada di C ++ Anda lebih baik selama

  4. baru & hapus vs. malloc dan gratis. Pernyataan baru () dan hapus () tidak hanya mengalokasikan dan mendelegasikan memori, tetapi juga memungkinkan kode untuk dieksekusi sebagai bagian dari destruct-er dipanggil dalam sebuah rantai. Jika Anda menggunakan C ++ - sebenarnya buruk untuk menggunakan malloc dan gratis.

  5. Tipe IO dan overloading operator Overloading operator membuat kode dapat dibaca atau lebih intuitif jika dilakukan dengan baik. Sama untuk operator << dan >> io. Cara C melakukan ini adalah dengan menggunakan pointer fungsi - tetapi itu berantakan dan hanya untuk programmer yang sudah mahir.

  6. Menggunakan "string". Char * dari C bekerja di mana-mana. Jadi C dan C ++ hampir sama. Namun, jika Anda menggunakan C ++ - akan selalu jauh lebih baik (dan lebih aman) untuk menggunakan kelas String yang menyelamatkan Anda dari bahaya array saat menjalankan yang hampir semuanya.

Fitur-fitur yang masih belum saya sukai di C ++ 1. Templates - Walaupun saya tidak menggunakan template yang berat dalam banyak kode - ini bisa berubah menjadi sangat kuat untuk library. Hampir tidak ada yang setara dengan itu di C. Tetapi pada hari normal - khususnya jika Anda melakukan secara matematis hilang.

  1. Pointer pintar - Ya, mereka sangat pintar! Dan seperti kebanyakan hal cerdas - mereka memulai dengan baik dan menjadi berantakan nantinya! Saya tidak suka menggunakannya

Hal-hal yang saya sukai tentang C dan ketinggalan dalam C ++

  1. Algoritma polimorfik dengan menggunakan pointer fungsi. Di C, ketika Anda menjalankan algoritma yang kompleks - beberapa kali Anda dapat menggunakan set pointer fungsi. Ini membuat polimorfisme sejati dengan cara yang kuat. Ketika Anda berada di C ++ Anda BISA menggunakan pointer fungsi - tapi itu buruk. Anda seharusnya hanya menggunakan metode - jika tidak bersiaplah untuk menjadi berantakan. Satu-satunya bentuk polimorfisme di kelas C ++ adalah fungsi dan kelebihan operator tetapi itu cukup membatasi.

  2. Utas sederhana. Ketika Anda membuat utas adalah pthreads - ini cukup sederhana dan dapat dikelola. Menjadi ketika Anda perlu membuat utas yang seharusnya "pribadi" untuk kelas (sehingga mereka memiliki akses ke anggota pribadi). Ada jenis dorongan kerangka kerja - tapi tidak ada dalam C ++ dasar.

Dipan.

Dipan Mehta
sumber
0

Fitur bahasa tertentu, bahkan jika itu adalah tambahan, dapat mengubah keseluruhan cara bahasa praktis perlu digunakan. Sebagai satu contoh, pertimbangkan kasus ini:

lock_mutex(&mutex);

// call some functions
...

unlock_mutex(&mutex);

Jika kode di atas melibatkan fungsi pemanggilan yang diimplementasikan dalam C ++, kita mungkin berada dalam masalah, karena salah satu dari pemanggilan fungsi itu mungkin dilemparkan dan kita tidak akan pernah membuka kunci di jalur luar biasa tersebut.

Destructors tidak lagi dalam bidang kenyamanan untuk membantu programmer menghindari lupa untuk melepaskan / sumber daya gratis pada saat itu. RAII menjadi persyaratan praktis karena tidak layak secara manusiawi untuk mengantisipasi setiap baris kode yang dapat memberikan contoh-contoh non-sepele (belum lagi bahwa baris-baris itu mungkin tidak dibuang sekarang tetapi mungkin nanti dengan perubahan). Ambil contoh lain:

void f(const Foo* f1)
{
    Foo f2;
    memcpy(&f2, f1, sizeof f2);
    ...
}

Kode seperti itu, walaupun umumnya tidak berbahaya di C, seperti api neraka yang menguasai kekacauan di C ++, karena memcpybulldozes atas bit dan byte dari objek-objek ini dan mem-bypass hal-hal seperti copy constructor. Fungsi seperti suka memset, realloc, memcpy, dll, sementara alat sehari-hari di kalangan pengembang C digunakan untuk melihat hal-hal dengan cara yang agak homogen bit dan byte dalam memori, tidak harmonis dengan sistem tipe yang lebih kompleks dan lebih kaya dari C ++. C ++ mendorong tampilan yang lebih abstrak dari tipe yang ditentukan pengguna.

Jadi hal-hal seperti ini tidak lagi memungkinkan untuk C ++, oleh siapa pun yang ingin menggunakannya dengan benar, untuk melihatnya sebagai "superset" belaka dari C. Bahasa-bahasa ini membutuhkan pola pikir, disiplin, dan cara berpikir yang sangat berbeda untuk menggunakan yang paling efektif .

Saya tidak berada di kamp yang melihat C ++ sebagai yang lebih baik dalam segala hal, dan sebenarnya sebagian besar lib pihak ketiga favorit saya adalah perpustakaan C untuk beberapa alasan. Saya tidak tahu persis mengapa tetapi lib C cenderung lebih minimalis di alam (mungkin karena tidak adanya sistem tipe kaya membuat pengembang lebih fokus pada menyediakan fungsionalitas minimal yang diperlukan tanpa membangun beberapa abstraksi yang besar dan berlapis), meskipun saya sering berakhir hanya menempatkan pembungkus C ++ di sekitar mereka untuk menyederhanakan dan menyesuaikan penggunaannya untuk tujuan saya, tetapi sifat minimalis lebih disukai bagi saya bahkan ketika melakukan itu. Saya sangat menyukai minimalis sebagai fitur menarik dari perpustakaan bagi mereka yang menggunakan waktu ekstra untuk mencari kualitas seperti itu, dan mungkin C cenderung mendorong itu,

Saya menyukai C ++ jauh lebih sering daripada tidak, tapi saya sebenarnya diharuskan menggunakan C API lebih sering untuk kompatibilitas biner terluas (dan untuk FFI), meskipun saya sering mengimplementasikannya dalam C ++ walaupun menggunakan C untuk header. Tapi kadang-kadang ketika Anda pergi tingkat yang sangat rendah, seperti ke tingkat pengalokasi memori atau struktur data tingkat yang sangat rendah (dan saya yakin ada contoh lebih lanjut di antara mereka yang melakukan pemrograman tertanam), kadang-kadang bisa membantu untuk menjadi dapat berasumsi bahwa tipe dan data yang Anda kerjakan tidak ada fitur tertentu seperti vtables, costructors, dan destructor, sehingga kami dapat memperlakukannya sebagai bit dan byte untuk diacak, disalin, bebaskan, realokasi. Untuk masalah tingkat rendah yang sangat khusus, terkadang dapat membantu untuk bekerja dengan sistem tipe yang jauh lebih sederhana yang disediakan C,

Klarifikasi

Satu komentar menarik di sini saya ingin menanggapi sedikit lebih mendalam (saya menemukan komentar di sini sangat ketat pada batas karakter):

memcpy(&f2, f1, sizeof f2); juga "neraka berkuasa atas kekacauan" di C jika Foo memiliki petunjuk yang memiliki, atau bahkan lebih buruk, karena Anda juga tidak memiliki alat untuk menghadapinya.

Itu poin yang adil tetapi semua yang saya fokuskan terutama dengan fokus pada sistem tipe C ++ dan juga sehubungan dengan RAII. Salah satu alasan penggandaan byte-ray seperti itu memcpyatau qsorttipe fungsi yang kurang menimbulkan bahaya praktis di C adalah bahwa penghancuran dari f1dan di f2atas adalah eksplisit (jika mereka membutuhkan penghancuran non-sepele), sedangkan ketika penghancur bergerak ke dalam gambar. , mereka menjadi tersirat dan otomatis (seringkali dengan nilai bagus untuk pengembang). Itu belum lagi keadaan tersembunyi seperti vptrs dan sebagainya yang fungsi-fungsi seperti itu akan melibas. Jika f1memiliki pointer danf2dangkal menyalinnya dalam beberapa konteks sementara, maka itu tidak menimbulkan masalah jika kita tidak mencoba untuk secara eksplisit membebaskan mereka yang memiliki pointer kedua kalinya. Dengan C ++ itu adalah sesuatu yang kompiler akan secara otomatis ingin lakukan.

Dan itu menjadi lebih besar jika biasanya dalam C, " Jika Foo memiliki pointer", karena kesaksian yang diperlukan dengan manajemen sumber daya akan sering membuat sesuatu yang biasanya lebih sulit untuk diabaikan sedangkan dalam C ++, kita dapat membuat UDT tidak lagi sepele. constructible / destructible hanya dengan membuatnya menyimpan variabel anggota mana pun yang tidak sepele membangun / destructible (dengan cara yang umumnya sangat membantu, sekali lagi, tetapi tidak jika kita tergoda untuk menggunakan fungsi seperti memcpyatau realloc).

Poin utama saya adalah untuk tidak mencoba memperdebatkan manfaat dari kesaksian ini (saya akan mengatakan jika ada, mereka hampir selalu terbebani oleh kontra meningkatnya kemungkinan kesalahan manusia yang menyertainya), tetapi hanya untuk mengatakan bahwa fungsi seperti memcpydan memmovedan qsortdan memsetdanreallocdan sebagainya tidak memiliki tempat dalam bahasa dengan UDT yang kaya fitur dan kemampuan seperti C ++. Meskipun mereka ada, saya pikir tidak akan terlalu diperdebatkan untuk mengatakan bahwa sebagian besar, pengembang C ++ yang luas akan bijaksana untuk menghindari fungsi seperti wabah, sedangkan ini adalah jenis fungsi yang sangat harian di C, dan saya d berpendapat bahwa mereka menimbulkan lebih sedikit masalah dalam C karena alasan sederhana bahwa sistem tipenya jauh lebih mendasar dan, mungkin "bodoh". Tipe C sinar-X dan memperlakukannya sebagai bit dan byte rentan kesalahan. Melakukan hal itu dalam C ++ bisa dibilang keliru karena fungsi-fungsi tersebut berjuang melawan fitur-fitur yang sangat mendasar dari bahasa dan apa yang didorongnya dari sistem tipe.

Itu sebenarnya daya tarik terbesar bagi saya C, bagaimanapun, khususnya dengan bagaimana hal itu terkait dengan interoperabilitas bahasa. Akan jauh, jauh lebih sulit untuk membuat sesuatu seperti C #'s FFI memahami sistem tipe penuh dan fitur bahasa C ++ ke konstruktor, destruktor, pengecualian, fungsi virtual, kelebihan fungsi / metode, kelebihan operator, kelebihan semua jenis pewarisan, dll. Dengan C itu adalah bahasa yang relatif bodoh yang telah menjadi agak standar sejauh API dengan cara yang banyak bahasa dapat impor langsung melalui FFI, atau secara tidak langsung melalui beberapa fungsi ekspor C API dalam bentuk yang diinginkan (mis: Java Native Interface ). Dan di situlah saya kebanyakan tidak punya pilihan selain menggunakan C, karena interoperabilitas bahasa merupakan persyaratan praktis dalam kasus kami (meskipun sering saya '

Tapi tahukah Anda, saya seorang pragmatis (atau setidaknya saya berusaha keras untuk menjadi). Jika C adalah bahasa yang paling kotor dan mengerikan, rawan kesalahan, dan jahat, beberapa rekan penggila C ++ saya mengklaimnya (dan saya menganggap diri saya penggemar C ++ kecuali bahwa entah bagaimana hal itu tidak mengarah pada kebencian C di pihak saya. ; sebaliknya itu memiliki efek sebaliknya pada saya untuk membuat saya menghargai kedua bahasa lebih baik dalam hal dan perbedaan mereka sendiri), maka saya berharap bahwa muncul di dunia nyata dalam bentuk beberapa buggiest dan leakiest dan produk dan perpustakaan yang tidak dapat diandalkan ditulis dalam C. Dan saya tidak menemukan itu. Saya suka Linux, saya suka Apache, Lua, zlib, saya menemukan OpenGL dapat ditoleransi karena warisan panjangnya terhadap persyaratan perangkat keras yang bergeser, Gimp, libpng, Kairo, dll. Setidaknya, apa pun rintangan yang ditimbulkan oleh bahasa, tampaknya tidak menimbulkan kemacetan sejauh menulis beberapa perpustakaan dan produk keren di tangan yang kompeten, dan hanya itulah yang saya minati. Jadi saya belum pernah menjadi tipe yang begitu tertarik pada yang paling bersemangat. perang bahasa, kecuali untuk membuat daya tarik pragmatis dan berkata, "Hei, ada hal-hal keren di luar sana! Mari kita belajar bagaimana mereka membuatnya dan mungkin ada pelajaran keren, tidak begitu spesifik dengan sifat bahasa yang idiomatik, yang dapat kita bawa kembali untuk bahasa apa pun yang kami gunakan. " :-D

Energi Naga
sumber
2
memcpy(&f2, f1, sizeof f2);juga "neraka berkuasa kekacauan" di C jika Foomemiliki petunjuk memiliki, atau bahkan lebih buruk, karena Anda juga kekurangan alat untuk menghadapinya. Jadi orang yang menulis C tidak melakukan hal-hal seperti itu
Caleth
@Caleth Beberapa yang menyederhanakan bahwa bahkan dengan memiliki pointer adalah pembebasan eksplisit dari pointer yang memiliki, sehingga secara efektif berubah menjadi salinan dangkal dalam kasus-kasus seperti itu dengan hanya satu tempat yang masih membebaskan memori asli, misalnya (dalam beberapa kasus, tergantung pada desain). Sedangkan dengan keterlibatan destruktor, kedua Foocontoh sekarang mungkin ingin menghancurkan array dinamis, atau vektor, atau sesuatu untuk efek ini. Saya sering menemukan untuk beberapa kasus khusus bahwa sangat membantu untuk dapat menulis struktur data tertentu untuk bersandar pada fakta bahwa perusakan lebih eksplisit daripada implisit.
Dragon Energy
@Caleth Ini memang hal yang malas di pihak saya karena jika Foomemang memiliki pointer memiliki, kita bisa memberikannya copy / move ctor, dtor, semantik nilai yang digunakan, dll, dan memiliki kode yang lebih kaya dan lebih aman. Tetapi kadang-kadang saya menemukan diri saya meraih C dalam kasus-kasus di mana saya ingin menggeneralisasi struktur data atau pengalokasi pada tingkat bit dan byte yang homogen, dengan asumsi tertentu saya dapat membuat pada jenis yang cenderung, dalam kasus penggunaannya yang sempit, disederhanakan. sedikit dengan asumsi seperti itu saya merasa sedikit lebih percaya diri untuk membuat di C.
Dragon Energy
@ Caleth Dalam kasus saya, kadang-kadang ada beberapa landasan arsitektur di mana saya merasa tidak perlu melihat hal-hal sebagai lebih dari bit dan byte dalam memori untuk mengatur dan mengakses (dan biasanya kasus-kasus itu tidak melibatkan apa pun kecuali PODs). Itu adalah beberapa kasus aneh yang tersisa di mana saya masih lebih suka C. Jika Anda membayangkan pengalokasi memori, sebenarnya tidak ada yang lebih dari bekerja dengan bit dan byte, void pointer, hal-hal semacam ini, dengan semua fokus pada menyelaraskan dan menggabungkan dan membagikan bit dan byte, dan dalam kasus-kasus yang sangat aneh saya menemukan C menawarkan lebih sedikit hambatan daripada C ++.
Dragon Energy
Kasus lain di mana saya kadang-kadang meraih C adalah kasus di mana kode tersebut mungkin sebenarnya menjadi lebih umum dan dapat digunakan kembali dengan menjadi kurang abstrak dan berfokus pada primitif, seperti API void filter_image(byte* pixels, int w, int h);contoh sederhana yang bertentangan dengan suka API void filter_image(ImageInterface& img);(yang akan memasangkan kode kami ke antarmuka gambar seperti itu, mempersempit penerapannya). Dalam kasus seperti itu saya kadang-kadang hanya mengimplementasikan fungsi-fungsi seperti itu di C karena ada sedikit yang bisa diperoleh di C ++, dan itu mengurangi kemungkinan bahwa kode tersebut akan membutuhkan perubahan di masa depan.
Dragon Energy