- C / C ++ terimini kullanmayı bırakmalı mıyım?
Kesinlikle. Bu yapının neyi ifade etmesi gerektiği açık değil, belki de, C ve C ++ 'nın terimi kullanan kişi adına ne olduğu konusunda kafa karışıklığı dışında.
Bu karışıklık bu kadar yaygın bir hayal kırıklığı kaynağı olduğundan, birçok insan bu konuda oldukça duygusal bir hal aldı ve bu terimin tek başına ortaya çıkması, katkılarınız konusunda olumsuz olmaları için yeterli neden olacak. Bu aptalca görünebilir ama elimizdekiler gibi görünüyor.
“C / C ++” hakkında konuşmak yerine, aslında ne demek istediğinizi açıkça belirten bir terim kullanmanızı öneririm.
C ++ 'ta C ++ için de geçerli olabilecek ya da olmayabilecek bir şeyden bahsediyorsanız, sadece C deyin .
Örnek: İşlev C dilinde nasıl main
bildirilmelidir?
İlk başta, C ++ cevabının aynı olduğu görünebilir: int main()
veya int main(int, char**)
. Ancak tartışma devam ettikçe, C ++ 'da, işlevin global kapsamda bildirilmesi gerektiğini, bunun C de bir anlam ifade etmeyeceğini, çünkü namespace
s' ye sahip olmadığını belirtmek uygun olabilir . Öte yandan, C main
tekrarlayan bir şekilde C ++ çağırırken izin verir . C ++ 'da return 0;
“düşmek” durumunda bir örtüklük vardır, main
ancak C'de return
herhangi bir yolda ifade gereklidir. Liste devam eder ve tartışılacak dilin ne olduğunu açıkça belirtirseniz, tartışmayı çok daha basit hale getirir.
C ++ 'da C için de olabilecek ya da olmayabilecek bir şeyden bahsediyorsanız, sadece C ++ deyin .
Örnek: Bir Will malloc()
ed dizisi int
s başlangıçta C ++ her sıfır olabilir mi?
C için kısa cevap aynı olur: hayır. Ancak cevap devam ettikçe, calloc
C ++ 'ın iyi bir alternatif std::vector<int>
olabileceğini, ilk etapta daha iyi bir seçim olabileceğini belirtmek faydalı olabilir.
C ve C ++ arasındaki benzerliği işaret etmek istiyorsanız, C ve C ++ tuşlarına basın .
Örnek: C ve C ++ 'da, sizeof
bir int
uygulama tanımlanmıştır ve derleyiciler ve mimariler arasında değişebilir.
Burada, C ve C ++ 'nın aynı şekilde davrandığını belirtmek isteriz. Açıkça her iki dilden de bahsediyoruz .
Aslında daha spesifik olmanızı ve sadece “C” veya “C ++” hakkında değil, tam sürüm hakkında konuşmanızı da öneririm. Her iki dil de evrim geçiriyor ve böyle açık bir cümle
C ++ yalnızca C stili destekler, yorum /* … */
ve // …
yorumlar /* … */
.
ne doğru ne de yanlış.
- # 1 cevabı evet ise, C ve C ++ karışımı kullanan bir programı nasıl çağırırım?
Dillerin çakışması nedeniyle, her bir C programı, C ++ 'ya benzeyebilecek veya bunun tersi görünebilecek parçalar içerecektir . Bununla birlikte, yazarlar muhtemelen bir C veya C ++ derleyicisi kullanmaya karar vermişlerdir. Yani “programı yazılmıştır söylemek C bir C derleyicisi ve” programı yazılır ile derlenmiş ise “ C ++ onlar herhangi bir modern C ++ özelliklerini kullanmayı reddetme olsalar bile, onlar C kullanırsanız ++ Derleyici”. Bazı insanlar C ++ kodunu C tarzı C ++ olarak adlandırır . Aşırı yüklenmenin olmaması, istisnalar, polimorfizm, şablonlar ve G / Ç bu kodun ortak bir özelliğini taşır.
Bunun yerine, bazı dosyalar C dilinde yazılır ve bir C derleyicisi ile derlenir ve diğer bazı dosyalar C ++ ile yazılırsa ve bir C ++ derleyicisi ile derlenir ve ardından birbirine bağlanan nesne dosyaları, “program bir C ve C ++ 'nın karışımı ”aslında aslında yaptınız.
Bununla birlikte, yazarlar her dosyayı bir C veya C ++ derleyicisi ile derlenebilecek şekilde yazmak için büyük özen göstermişlerse ve sonuçta ortaya çıkan program aynı şeyi yapacaktır, “programın ortak bir C ve C ++ alt kümesinde yazılmıştır ”.
İkincisi, genellikle C ve C ++ kodu arasında paylaşılması gereken başlık dosyaları için geçerlidir. Bu arada, böyle bir kod yazmak kolay değil. Eğer daha fazla ancak böyle yapılar C ve C ++ içinde geçerli olduğunu kullanıldığını vurgulamak istiyorsanız ve çok farklı derleyici satıcılar tarafından desteklenmektedir terimi bir taşınabilir C ve C ++ ortak alt küme kullanılabilir bu vurgulamak.
- Her ikisinin de “farklı” dilleri olduğu göz önüne alındığında, bir noktada C ++ derleyicilerinin C dilinde yazılmış kodları desteklemekten vazgeçmesi olasıdır (modern C ++, işaretçiler, dinamik bellek kullanımı vb. Gibi temel şeyler için C zihniyetinden uzaklaşmaktadır)?
Bu soruyu anladığımdan emin değilim. C ve C ++ yana olan farklı dil, bunlardan biri için bir derleyici diğeri için yazılmış bir programı kabul bekleyemezsiniz. Bununla birlikte, derleyiciler genellikle modüler bir şekilde tasarlanmıştır ve bir derleyicinin bir C ++ ön ucu varsa , olasılıklar iyidir, ayrıca bir C ön ucuna sahip olacaktır. (Daha sonra bunlardan hangisini komut satırı düğmesi veya benzer yöntemlerle istediğinizi seçersiniz.) Her iki dil de yaygın kullanımda olduğu sürece, bunun değişmesi pek mümkün görünmüyor. “Modern C ++” hakkındaki düşünceniz temel olarak iyi kodlama standartları ve standart kütüphane meselesidir. Gönderen derleyici'nın açısından, her iki dilde evrimi yerine uzaklaşan daha yakınsama olduğunu.
- Şu anda uyumluluğu korumak için C / C ++ standartlarını yapan kişiler arasında herhangi bir işbirliği var mı?
Evet. Bellek modeli ve C ++ 11 ve C11'de tanıtılan atomik işlemler kütüphanesi buna iyi bir örnektir. Her iki dilin tasarımcılarının da uyumluluğun önemli olduğunu ve onu geliştirmek için çalıştıklarını fark ettikleri görülüyor. Şahsen, işbirliğinin daha yoğun olmasını ve iki ISO çalışma grubunun belki de bir araya gelmesini diliyorum, ancak dileklerim önemli değil.
Bjarne Stroustrup, C ve C ++ sürümleri arasındaki farkları ve ortaklıkları , ironik bir şekilde “C / C ++ Uyumluluğu” başlıklı C ++ Programlama Dilinin 4. baskısının § 44.3'ünde konuşur . Terimin kullanımı, bu durumda ne anlama geldiği açıkça belli olduğundan, uygun olabilir.
- Eğer # 4 evet ise, böyle bir işbirliği yakın bir gelecekte modern C ++ 'ın ortaya çıkması ile sonuçlanabilir (11/14/17).
Yukarıda tartışıldığı gibi, C ++ 11'de gerçekleşti ve tekrar olması bekleniyor / umuyor / gerekiyordu.