Saya mengerti C dan C ++ adalah bahasa yang berbeda tetapi ketika saya belajar C ++ saya selalu diberitahu bahwa C adalah bagian dari C ++ atau C ++ adalah C dengan kelas. Dan itu cukup benar sampai munculnya C ++ x0, C ++ 11 (atau C ++ 11/14/17 modern secara umum). Bahkan (terutama ketika bekerja pada sistem embedded) sangat mungkin untuk menemukan kode yang ditulis dalam C ++ tetapi dengan banyak bagian yang ditulis seluruhnya dalam bahasa C murni. Di sini saya punya beberapa pertanyaan:
- Haruskah saya berhenti menggunakan istilah C / C ++?
- Jika jawaban ke # 1 adalah ya, bagaimana saya memanggil program yang menggunakan campuran C dan C ++?
- Mengingat bahwa keduanya adalah bahasa yang 'berbeda', 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)
- Apakah sekarang ada kolaborasi antara orang-orang yang membuat standar C / C ++ untuk menjaga kompatibilitas
- Jika # 4 adalah ya, kolaborasi tersebut dapat berakhir dalam waktu dekat dengan munculnya c ++ modern (11/14/17)
Saya tahu bahwa sudah ada pertanyaan serupa, tetapi saya yakin bahwa banyak orang membagikan pertanyaan ini jadi saya sangat tertarik untuk mendapatkan jawaban yang baik terutama untuk poin-poin yang berkaitan dengan kecenderungan C ++ dalam waktu dekat.
c++
c
terminology
c++11
rachach
sumber
sumber
Should I stop using the term C/C++
. Iya. Ini hanya digunakan oleh perekrut dan SDM. Insinyur akan menggunakan istilahC
atauC++
sebagai bahasa independen. Jika Anda menemukan insinyur yang mencampur istilah, hindari mereka.Jawaban:
C tidak pernah menjadi bagian dari C ++. Contoh paling jelas dari hal ini adalah
int new;
. Ini benar sejak C89 dan C ++ 98, dan bahasa-bahasa hanya tumbuh lebih jauh satu sama lain ketika standar baru telah keluar.Iya
File sumber ditulis dalam satu bahasa atau yang lain. Suatu program dapat terdiri dari kode dari beberapa bahasa yang bekerja bersama-sama, atau sebuah executable yang dihasilkan dengan menghubungkan berbagai objek yang dikompilasi. Anda akan mengatakan program itu ditulis dalam C dan C ++, "C / C ++" bukan bahasa.
3) Mereka tidak pernah melakukannya.
char *a = malloc(10);
. C dan C ++ belum pernah sepenuhnya kompatibel setidaknya selama mereka memiliki standar ISO (saya tidak tahu semua detail tentang hari-hari pra-standar). klik tautan atau lihat di bawah untuk file yang baik-baik saja dengan C89 dan lebih tinggi, tetapi tidak valid di bawah standar C ++ apa pun.4) afaik tidak, kelompok kerja saling menyadari satu sama lain tetapi standar membuat keputusan yang terbaik untuk diri mereka sendiri.
Saya selalu merasa perlu menyebutkan bahwa C adalah bagian dari Objective-C.
sumber
javac
, tetapi apa gunanya?C/Fortran/sh
masuk akal sekarang ?! ioccc.org/years-spoiler.html#1986 .Ada memiliki menjadi alasan mengapa hal ini datang bersama-sama begitu sering. Meskipun Anda seharusnya tidak memberi tahu guru C Anda bahwa bahasanya adalah bagian dari C ++, ada beberapa kebenaran di sini. Orang lain sudah mengungkapkan sudut pandang guru Anda. Ini sangat bagus (dan diilustrasikan dengan contoh, dll.). Tapi kita tidak hidup di menara gading, atau buku.
Bos besar Anda tidak peduli tentang bahasa yang Anda gunakan. Jika dia tahu sedikit tentang pemrograman, katakan saja Anda menggunakan C / C ++ dan itu akan terdengar seperti "Saya menggunakan bahasa yang perlu dikompilasi ke kode mesin, dengan DLL dan semua hal yang rumit". Ini adalah bagian "komunikasi eksternal".
Jika Anda membuat perpustakaan yang dapat dihubungkan oleh C dan C ++, Anda pasti ingin menyebutnya pustaka C / C ++. Tentu saja, seseorang akan mengangkat tangan dan bertanya mengapa Anda tidak menyebutnya pustaka C yang kebetulan memiliki pembungkus C ++, dan lagi pula C ++ dapat menautkan ke pustaka C sehingga Anda tidak perlu menyebutkannya sama sekali. Jawab saja: "Ya, Anda benar, ini adalah perpustakaan C / C ++". Ini adalah bagian "komunikasi internal".
Jika Anda membuat analisa leksikal untuk C ++, Anda akan terkejut betapa baiknya kerjanya dengan C. Anda bahkan mungkin tidak perlu memodifikasi semuanya. Ini adalah "jika terlihat seperti bebek, dll." bagian.
Dll
Mayoritas program C yang pernah saya lihat kompilasi (dan bekerja) tanpa modifikasi sebagai kode C ++. Jangan biarkan beberapa pengecualian atau programer dogmatis (betapapun berpengaruh) menipu intuisi Anda. C dan C ++ sangat dekat, dan seringkali kompatibel, dan sering dicampur dan dicocokkan bersama, sehingga istilah C / C ++ digunakan. Ini digunakan karena berguna untuk menggambarkan situasi seperti ini di mana tidak terlalu penting apakah Anda mempertimbangkan C atau C ++, asalkan bukan Java atau PHP . Kita tahu itu "salah", tetapi kita tidak peduli, itu lebih bermanfaat daripada salah.
Mungkin disalahgunakan, mungkin bodoh, tapi tetap saja, saya tidak yakin manfaat apa yang akan Anda dapatkan dengan menjadi lebih bertele-tele daripada yang dibutuhkan dan menolak untuk berkomunikasi dengan cara yang dipahami orang lain. Jika Anda merasa tidak nyaman dalam beberapa situasi tertentu, maka jangan gunakan istilah umum C / C ++, tetapi yang relevan dengan kasus (baik C atau C ++).
Jangan takut dengan masa depan. Sistem operasi kami ditulis dalam C. Cukup banyak C / C ++ produksi perangkat lunak saat ini terjadi di C ++. Pasangan ini akan tinggal sebentar di sini. Tidak ada yang tertarik pada satu yang dibuat lebih tidak kompatibel dengan yang lain (sebenarnya sebaliknya).
Untuk lebih spesifik tentang poin Anda:
1) Itu tergantung. Ya ketika itu dapat menyebabkan kebingungan, ketika Anda merasa tidak nyaman, atau ketika itu salah atau di luar konteks. Tidak ketika Anda merasa sudah cukup.
2) N / A
3) Saya pikir tidak, tapi saya tidak punya bola kristal.
4) tidak tahu
5) Saya tidak berpikir sehingga tidak ada yang mendorong ke arah ini
sumber
C/C++
tidak jelas, dan karenanya tidak berguna. Mengikuti contoh Anda, aC/C++ library
bisa berarti pustaka C dengan pembungkus C ++, atau pustaka C ++ dengan pembungkus C. Atau bisa berarti bahwa perpustakaan terdiri dari beberapa modul, beberapa dikompilasi menggunakan C ++, beberapa dikompilasi dalam C. Ini tidak jelas sama sekali. Bagi saya, mengatakan bahwa perpustakaan dibuatC and C++
jauh lebih jelas, atauC library with compatibility with C++
juga jauh lebih jelas. Dan di sini ambiguitas ini dengan hanya dua lang, bayangkan menggunakan ini "strategi komunikasi" selama lebih ...Melawan arus saya akan mengatakan itu tergantung pada konteksnya .
Istilah "C / C ++" biasanya tidak sesuai ketika mengatakan sesuatu seperti "ini adalah program C / C ++", tetapi ini telah dieksplorasi secara mendalam pada jawaban lain.
Namun, mungkin ada konteks di mana C / C ++ dapat sesuai.
sumber
or
, bukan sebagai logisxor
. Jadi itu salah satu atau keduanya. Dalam daftar pekerjaan Anda tahu C atau C ++ atau keduanya. Sekarang, saya merasa banyak orang yang religius dengan istilah ini. Seorang programmer C yang baik akan baik-baik saja mengambil C ++ terlepas dari betapa berbedanya kedua bahasa. Saya mulai coding PHP dan kemudian saya pindah ke Scala (dua bahasa yang sama sekali berbeda) Mengapa seorang programmer C tidak dapat mengambil C ++ atau sebaliknya? Istilah C / C ++ memiliki beberapa kelebihan jika digunakan dalam konteks yang benar.Ada banyak perbedaan halus antara C dan C ++. Misalnya, dalam C ++, sebuah
const
variabel di lingkup global memiliki hubungan internal kecuali dideklarasikanextern
, tetapi di C memiliki hubungan eksternal kecuali dinyatakanstatic
. Dengan mengatakan "C / C ++", OP menegaskan pengetahuan bahwa jawaban untuk pertanyaan mereka adalah sama di C dan C ++, ketika itu sangat baik mungkin tidak. Hal ini tentu saja mempersulit calon penjawab.Terkadang kita dapat melihat bahwa kode tidak valid dalam satu bahasa atau yang lain (misalnya, konversi implisit dari
void*
ke penunjuk ke objek tidak valid dalam C ++). Ini menyebalkan. Mengapa Anda mengatakan "C / C ++" ketika Anda memiliki sepotong kode yang valid dalam C tetapi tidak C ++? Apakah Anda bermaksud C, atau ini hanya kesalahan dalam kode yang dimaksudkan sebagai C ++?Kadang-kadang jawabannya akan berbeda tergantung pada bahasa (misalnya, array panjang variabel ada di C99 tetapi tidak di C ++). Jika kami tidak tahu bahasa apa yang Anda bicarakan, kami harus menebak, atau menulis jawaban untuk keduanya ketika hanya satu yang benar-benar bermanfaat, karena Anda tahu bahasa apa yang sebenarnya Anda gunakan; Anda hanya tidak memberi tahu kami!
Terkadang jawabannya benar-benar sama untuk kedua bahasa, tetapi sulit untuk memastikannya. Sebagai contoh, saya pikir C dan C ++ memiliki aturan konversi integer yang sama, tetapi agar benar-benar yakin, saya harus membaca kedua standar dengan cermat. Sekali lagi, ini membuat saya melakukan pekerjaan dua kali lebih banyak dari yang diperlukan ketika Anda mungkin hanya peduli pada salah satu bahasa.
Bagaimanapun, untuk menjawab pertanyaan Anda yang lain:
Iya.
Jika Anda menautkan kode C dan C ++, Anda dapat menggunakan kedua tag tersebut, tetapi harap sebutkan bahasa masing-masing file.
Terkadang ada perubahan yang dipatahkan, tetapi jarang terjadi dan biasanya berdampak terbatas (jika tidak disetujui). Misalnya,
auto
dalam C ++ 11.Saya tidak berpikir mereka berkolaborasi secara langsung, tetapi mereka memperhatikan perkembangan dalam bahasa lain dan mencoba menghindari memperkenalkan perubahan yang akan membuat kompatibilitas lebih sulit.
Dan jika Anda benar-benar ingin tahu tentang kedua bahasa itu, tidak apa-apa, dan Anda bisa mengatakan itu dalam pertanyaan Anda. Ketika Anda mengatakan "C / C ++", saya benar-benar tidak yakin apa yang Anda maksud, dan sepertinya Anda membuat asumsi tentang dua bahasa tersebut.
sumber
struct class
untuk sesuatu sepertistruct klass
untuk alasan itu, dan kemudian selalu ditembak jatuh oleh Linus.C tidak pernah menjadi bagian dari C ++. Misalnya C89 bukan bagian dari C ++ 98.
Beberapa contoh:
int
vsbool
)Iya.
Suatu program adalah C atau C ++ (jika bahkan beberapa program yang sangat mendasar dapat dikompilasi dengan kompiler C atau C ++). Kompiler apa yang Anda gunakan untuk mengkompilasinya? Itu harus menjawab pertanyaan Anda. Harbison & Steele menciptakan istilah Clean C untuk menunjuk subset umum C dan C ++ tapi saya pikir itu ide yang buruk.
EDIT : Namun saya mengakui bahwa secara teknis Anda dapat menautkan file objek C dan C ++ dalam satu program tetapi OTH ada banyak bahasa yang diizinkan untuk dicampur dalam satu program misalnya Java dan C ++. Saya pikir menggunakan istilah C / C ++ program hanya menambah kebingungan bahwa itu ditulis dalam satu bahasa yang disebut C / C ++.
Ada banyak fitur (contoh: array panjang variabel, anggota array fleksibel
_Generic
,, ...) dari C99 atau C11 yang tidak didukung oleh versi C ++.sumber
Beberapa program ditulis dalam campuran C dan C ++
Ini hanya fakta kehidupan. Anda dapat mengkompilasi file objek dari C dan C ++ dan menautkannya bersama. Hasilnya cukup bisa disebut "program C / C ++".
Tapi itu hanya program secara keseluruhan. Bagaimana dengan unit kompilasi individu?
Ada subset dari C yang juga merupakan subset dari C ++
Suatu program (atau unit kompilasi) yang ditulis dalam subset itu akan mengkompilasi dan berperilaku sama di bawah kompiler C dan C ++ yang sesuai. Program atau file seperti itu dapat dengan tepat disebut "program C / C ++" atau "file C / C ++".
Program parsial seperti file header juga dapat digunakan di kedua program C dan C ++. File header seperti itu dapat dengan tepat disebut sebagai header C / C ++.
Mengutip Profesor Bjarne Stroustrup:
Jadi ya ada yang namanya C / C ++. Ini adalah segala sesuatu yang valid C dan valid C ++.
Pra-prosesor C adalah bagian dari bahasa C. Pra-prosesor C ++ adalah bagian dari bahasa C ++
Anda dapat menulis unit kompilasi yang akan dikompilasi di bawah C atau C ++ dan berbeda . Misalnya, ini mungkin memiliki fungsionalitas dasar yang dikompilasi dalam C tetapi mengambil keuntungan dari pustaka C ++ jika dikompilasi dalam C ++.
Jika program pada dasarnya sama, tetapi dengan fitur tambahan, tidak salah untuk mengatakan itu adalah program yang sama. Itu sama, tetapi juga berbeda.
Kebanyakan programmer C dapat melakukan setidaknya sedikit C ++ dan sebaliknya
Bukanlah tidak masuk akal untuk menyebut orang seperti itu seorang programmer C / C ++. Ya, mereka mungkin spesialisasi dalam satu, tetapi ada orang yang adalah C kompeten atau C ++ programmer yang benar-benar tidak bisa melakukan apa pun dari bahasa lain? Di satu sisi, bukankah mereka semua programmer C / C ++?
Tidak ada yang salah dengan mengatakan "C / C ++". Yang penting sedang dipahami
Bahasa Inggris bukan alat untuk mengekspresikan silogisme . Anda dapat menggunakan bahasa Inggris untuk logika, tetapi hanya adil, dan dengan usaha keras.
Ini karena kata-kata tidak secara alami memiliki makna yang tepat, tetapi lebih merupakan awan samar dari denotasi dan konotasi. Yang penting adalah jika orang mengerti apa yang Anda katakan.
sumber
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 .
Jika Anda berbicara tentang sesuatu dalam C ++ yang mungkin atau mungkin juga tidak berlaku untuk C, cukup katakan C ++ .
Jika Anda ingin menunjukkan kesamaan antara C dan C ++, ucapkan C dan C ++ .
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
tidak benar atau salah.
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.
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.
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.
Seperti dibahas di atas, itu terjadi di C ++ 11 dan diharapkan / diharapkan / perlu terjadi lagi.
sumber
C / C ++ adalah persimpangan C dan C ++.
int new;
bukan C / C ++, dan tidak jugavector<int> foo;
.Demikian pula, C89 / C99 adalah persimpangan dari dua bahasa ini, di mana tidak ada
enum bool { false, true };
ataufor(int i = 0;;)
diizinkan.Dan C ++ 11 / C ++ 14, dll.
Dimungkinkan untuk menulis kode yang mengkompilasi (dan berjalan dengan benar) di bawah C ++ 11 dan C ++ 14, walaupun kompilasi di bawah satu tidak berarti mengkompilasi di bawah yang lain. Faktanya, banyak orang melakukan ini.
Dan banyak orang menulis kode yang bekerja di C dan C ++.
Jelas, semakin besar tumpang tindih, semakin masuk akal; Saya tidak berharap melihat pertanyaan tentang kode C / C ++ / Java.
Meskipun "masuk akal" untuk berbicara tentang subset umum dari bahasa-bahasa ini, banyak pertanyaan tidak akan memiliki jawaban dalam subset ini, misalnya Apa yang seharusnya main () kembali dalam C dan C ++?
Tetapi Anda dapat berbicara tentang kode yang berfungsi untuk spesifikasi berbagai bahasa, apakah spesifikasi itu dibedakan berdasarkan "versi" atau "nama bahasa" atau sebaliknya.
sumber
Ini adalah semacam tanggapan terhadap posisi bahwa "ini adalah kode untuk programmer yang bekerja dekat dengan logam dan tidak apa-apa dalam konteks manajemen" terlihat dalam beberapa jawaban dan komentar lainnya.
Saya berpendapat bahwa bahkan interpretasi itu harus dijaga dengan hati-hati.
Dimulai paling tidak pertengahan tahun 90-an jika Anda menginginkan seorang programmer C ++ dan seseorang yang menggambarkan diri mereka sebagai seorang programmer C yang diterapkan, Anda harus bertanya seberapa banyak mereka tahu tentang desain berorientasi objek, berapa banyak pengalaman yang mereka miliki dengan debugging pada suatu objek konteks yang berorientasi, dan tentang kemampuan mereka untuk menggunakan perpustakaan templat. Anda ingin menyelidiki dengan tepat masalah-masalah tersebut selama wawancara dan proses perekrutan.
Di sisi lain, sekarang sudah lebih dari satu dekade sejak guru C ++ mulai mendorong "C ++ modern" yang berarti penekanan pada perpindahan dari pointer kosong ke objek pointer yang lebih aman dan idiom berbasis iterator. Dengan munculnya C ++ 11 sekarang ada dukungan eksplisit untuk pemrograman multi-paradigma dan dorongan menuju kode yang tidak menunjukkan bare pointer sangat kuat. Apa artinya itu adalah bahwa jika saya mewawancarai seorang programmer C ++ untuk posisi C hari ini, saya akan sangat khawatir untuk memeriksa seberapa akrab orang ini dengan pointer aktual yang diaktifkan penembakan kaki.
Saya tidak berada dalam bisnis akhir-akhir ini (bahkan ketika saya masih berada di Stack Overflow saat masih bayi), jadi saya tidak akan berani menebak seberapa sering orang yang diwawancarai khayalan tidak memiliki keterampilan cross-over, tetapi Saya pikir seperti yang paling sering diterapkan bahasa sekarang memang sangat berbeda.
Singkatnya "C / C ++" harus dijatuhkan tidak hanya dalam konteks teknis tetapi dalam sebagian besar konteks bisnis juga.
sumber
Jawaban paling sederhana untuk pertanyaan ini adalah Anda seharusnya tidak menggunakan istilah itu. Itu adalah istilah yang seharusnya tidak ada. Tidak ada artinya. Setiap program adalah C, atau C ++.
C ++ 98 dan 03 bahkan bukan C jarak jauh dengan Kelas. Siapa pun yang mengajarimu ini tidak tahu apa-apa dan kau bisa melupakannya. Ini tidak pernah benar.
sumber
Secara konseptual, seharusnya tidak ada kesulitan khusus dalam mendesain file sumber C sehingga mereka juga dapat dikompilasi apa adanya dengan C ++. Memang ada beberapa keuntungan signifikan untuk melakukan ini. Misalnya, ketika menulis kode untuk sistem tertanam, terkadang bermanfaat untuk dapat menguji kode pada lingkungan PC yang dihosting. Jika kode dikompilasi dengan bersih sebagai C ++, dimungkinkan untuk memiliki pernyataan seperti "MOTOR_ENABLE = 1;" menulis ke bit I / O yang mudah menguap pada sistem embedded (dikompilasi sebagai C), tetapi memicu logika emulasi pada PC (dikompilasi sebagai C ++). Mungkin juga akan mungkin untuk mendesain tipe C ++ pada PC yang akan berperilaku seperti yang dilakukan uint16_t pada sistem embedded yang lebih kecil (sehingga misalnya
u16 x=65533;
, kompiler harus memperhatikan nilai darix*x
sebagai sembilan, daripada memiliki pemerintahan bebas untuk melakukan apa pun yang diinginkannya), meskipun belum ada emulator saya yang memasukkan itu [sebagian karena kompiler C ++ yang saya gunakan belum melakukan hal yang aneh dalam kasus seperti itu].Sayangnya, pemrogram C dan pemrogram C ++ memiliki antipati yang cukup terhadap satu sama lain sehingga bahasa, selama bertahun-tahun, berevolusi dengan cara yang kompatibel. Sementara C89 berusaha untuk mengadaptasi beberapa fitur yang lebih berguna dari C ++ (seperti prototipe fungsi) suatu sikap tampaknya telah muncul bahwa programmer yang menginginkan salah satu fitur C ++ harus menggunakan C ++, mengabaikan fakta bahwa ada banyak situasi di mana ia akan akan membantu untuk dapat menggunakan beberapa fitur C ++ (mis. kemampuan untuk membebani fungsi dengan tautan inline statis atau statis tanpa harus menerima biaya yang terkait dengan fitur lain yang tidak diperlukan seseorang (mis. nama mangling yang terkait dengan ekspor) fungsi kelebihan beban).
Sementara persimpangan C89 dan C ++ 98 adalah bahasa yang bisa dikerjakan, superset yang dapat digunakan dari versi C yang lebih baru dengan versi C ++ yang lebih baru mungkin menyusut daripada tumbuh (berkat hal-hal seperti Aturan Keterbatasan Mengasingkan) dan tren mendukung yang selalu ada. meningkatkan celah.
sumber
namespace
dan mendeklarasikan yang terakhir sebagaiextern "C"
, kemudian gunakan kompiler C ++.extern "C"
atau apakah ada komplikasi lain juga (misalnya inisialisasi objek statis, dll.)? Apakah ada cara di C ++ untuk membuatnya sehinggafoo(1234)
akan memanggilfoo_const(1234)
makro sementarafoo(x)
[di manax
bukan konstanta] akan memanggilfoo_var(x)
fungsi? Ada banyak situasi dalam kode tertanam di mana mungkin masuk akal untuk "fungsi" sepertiSET_PORT(port, state)
memiliki tiga bentuk berdasarkan apakah port dan state keduanya ...