- Haruskah saya berhenti menggunakan istilah C / C ++?
Benar. Tidak jelas apa yang ingin diungkapkan oleh konstruk ini kecuali, mungkin, kebingungan tentang apa yang C dan C ++ atas nama orang yang menggunakan istilah tersebut.
Karena kebingungan ini merupakan sumber frustrasi yang umum, banyak orang menjadi sangat emosional tentang hal itu dan penampilan istilah itu saja akan menjadi alasan yang cukup bagi mereka untuk menjadi negatif tentang kontribusi Anda. Ini mungkin tampak konyol tetapi tampaknya seperti yang kita miliki.
Saya merekomendasikan bahwa alih-alih berbicara tentang "C / C ++" Anda menggunakan istilah yang benar-benar menjelaskan apa yang Anda maksud.
Jika Anda berbicara tentang sesuatu di C yang mungkin atau tidak mungkin juga berlaku untuk C ++, hanya mengatakan C .
Contoh: Bagaimana seharusnya main
fungsi tersebut dinyatakan dalam C?
Pada awalnya, sepertinya jawaban untuk C ++ sama: int main()
atau int main(int, char**)
. Tetapi ketika diskusi berlangsung, mungkin relevan untuk menunjukkan bahwa dalam C ++, fungsi tersebut harus dideklarasikan pada lingkup global, yang tidak masuk akal dalam C, karena tidak memiliki namespace
s. Di sisi lain, C memungkinkan panggilan main
secara rekursif sementara C ++ tidak. Di C ++, ada implisit return 0;
jika Anda "jatuh" main
tetapi dalam C return
pernyataan diperlukan di jalan apa pun. Daftar berjalan dan membuat diskusi lebih sederhana jika Anda membuatnya jelas di muka apa bahasa yang akan dibahas.
Jika Anda berbicara tentang sesuatu dalam C ++ yang mungkin atau mungkin juga tidak berlaku untuk C, cukup katakan C ++ .
Contoh: Apakah malloc()
array ed int
pada awalnya adalah all-nol di C ++?
Jawaban singkat untuk C kebetulan sama: tidak. Tetapi ketika jawabannya terus berlanjut, mungkin bermanfaat untuk menunjukkan bahwa dalam C, calloc
akan menjadi alternatif yang baik sementara di C ++, menggunakan std::vector<int>
mungkin merupakan pilihan yang lebih baik di tempat pertama.
Jika Anda ingin menunjukkan kesamaan antara C dan C ++, ucapkan C dan C ++ .
Contoh: Dalam C dan C ++, yang sizeof
merupakan int
adalah implementasi didefinisikan dan dapat bervariasi antara compiler dan arsitektur.
Di sini, kami ingin menunjukkan bahwa C dan C ++ berperilaku dengan cara yang sama. Kami secara eksplisit berbicara tentang kedua bahasa.
Saya sebenarnya menyarankan agar Anda lebih spesifik dan tidak hanya berbicara tentang "C" atau "C ++" tetapi versi yang tepat. Kedua bahasa tersebut berevolusi dan pernyataan tumpul seperti
C ++ mendukung /* … */
dan // …
berkomentar sementara C hanya mendukung /* … */
style.
tidak benar atau salah.
- Jika jawaban ke # 1 adalah ya, bagaimana saya memanggil program yang menggunakan campuran C dan C ++?
Karena bahasa memiliki tumpang tindih, setiap program C akan berisi bagian yang mungkin terlihat seperti C ++ dan sebaliknya. Namun demikian, penulis mungkin akan memilih menggunakan kompiler C atau C ++. Jadi katakan “program ini ditulis dalam C ” jika dikompilasi dengan kompiler C dan “program ditulis dalam C ++ ” jika mereka menggunakan kompiler C ++, bahkan jika mereka mungkin menolak untuk menggunakan fitur C ++ modern. Beberapa orang menyebut kode C ++ seperti C-style C ++ . Tidak adanya overloading, pengecualian, polimorfisme, templat dan I / O stream karakteristik umum dari kode tersebut.
Jika, sebaliknya, beberapa file yang ditulis dalam C dan dikompilasi dengan kompiler C dan beberapa lainnya file yang ditulis dalam C ++ dan dikompilasi dengan C ++ compiler, dan kemudian file objek terkait bersama-sama, saya akan mengatakan bahwa “program ini ditulis dalam sebuah campuran C dan C ++ "seperti, pada kenyataannya, Anda sudah melakukannya.
Namun, jika, sebagai gantinya, penulis sangat berhati-hati untuk menulis setiap file sedemikian rupa sehingga dapat dikompilasi dengan kompiler C atau C ++ dan program yang dihasilkan akan melakukan hal yang sama, Anda dapat mengatakan bahwa “program ditulis dalam subset umum dari C dan C ++ ”.
Yang terakhir sering terjadi pada file header yang harus dibagi antara kode C dan C ++. Ngomong-ngomong, menulis kode semacam itu tidak mudah. Jika Anda ingin lebih menekankan bahwa hanya konstruksi seperti yang digunakan yang berlaku di C dan C ++ dan secara luas didukung oleh vendor compiler yang berbeda, istilah yang portabel bagian umum dari C dan C ++ dapat digunakan untuk menekankan ini.
- Mengingat keduanya adalah bahasa yang “berbeda”, apakah ada kemungkinan bahwa pada titik tertentu kompiler C ++ berhenti mendukung kode yang ditulis dalam bahasa C (karena C ++ modern menyimpang dari mentalitas C untuk hal-hal dasar seperti pointer, penanganan memori dinamis, dll)?
Saya tidak yakin saya mengerti pertanyaan ini. Karena C dan C ++ adalah bahasa yang berbeda, Anda tidak dapat mengharapkan kompiler untuk salah satu dari mereka menerima program yang ditulis untuk yang lain. Namun, kompiler sering dirancang dengan cara modular dan jika kompiler memiliki C + + front-end , kemungkinan bagus itu juga akan memiliki C front-end. (Anda kemudian akan memilih yang mana dari yang Anda inginkan melalui saklar baris perintah atau cara serupa.) Selama kedua bahasa akan digunakan secara luas, tampaknya sangat tidak mungkin bahwa ini akan berubah. Poin Anda tentang "C ++ modern" Saya pikir pada dasarnya adalah masalah standar pengkodean yang baik dan perpustakaan standar. Dari sudut pandang kompiler , evolusi kedua bahasa agak konvergen daripada menyimpang.
- Apakah sekarang ada kolaborasi antara orang-orang yang membuat standar C / C ++ untuk menjaga kompatibilitas?
Iya. Model memori dan pustaka operasi atom yang diperkenalkan dalam C ++ 11 dan C11 adalah contoh yang baik. Tampaknya para perancang kedua bahasa menyadari bahwa kompatibilitas itu penting dan berupaya meningkatkannya. Secara pribadi, saya berharap kolaborasi ini lebih intens dan dua kelompok kerja ISO bahkan mungkin bergabung, tetapi keinginan saya tidak penting.
Bjarne Stroustrup berbicara tentang perbedaan dan kesamaan antara berbagai versi C dan C ++ di § 44,3 dari edisi ke 4 Bahasa Pemrograman C ++ yang, ironisnya, berjudul "C / C ++ Kompatibilitas". Penggunaan istilah ini mungkin sebenarnya sesuai untuk kasus ini karena jelas apa yang dimaksud.
- Jika # 4 adalah ya, kolaborasi tersebut dapat berakhir dalam waktu dekat dengan munculnya C ++ modern (11/14/17)
Seperti dibahas di atas, itu terjadi di C ++ 11 dan diharapkan / diharapkan / perlu terjadi lagi.