C ve C++ Dillerinin Farkları

C ve C++ Dillerinin Farkları

C ve C++ Arasındaki Bazı Farklar

1) C’de fonksiyonun parametresi yoksa, prototipin fonksiyon parametre listesinde void kelimesi bulunur. Örneğin C’de f1( ) adlı bir fonksiyonun parametresi yoksa(ve geriye bir char gönderiyorsa) bu fonksiyonun prototipi şu şekilde olur:

char f1(void);

Fakat C++’da void‘in yazılması isteğimize bağlıdır. Sonuç olarak C++’da f1( )‘in prototipi genelde şu şekildedir:

char f1();

Eğer yukarıdaki prototip bir C programında bulunsaydı fonksiyona parametreler hakkında hiçbir şey söylenmemiş olacaktı. C++’da ise bu, fonksiyonun parametresi olmadığı anlamına gelir.

2) Bazı fonksiyonlar kendi içerisinde çeşitli işlemler yaptıktan sonra yaptığı işleminsonucunu kendisini çağıran fonksiyona bildirirler. Bu değere geri dönüş değeri (returnvalue) adı verilir. Geri dönüş değerinin hangi türden olacağını belirten alana “fonksiyon tipi” denir. C’de fonksiyonun geri döndürecek bir sonucu yoksa o fonksiyonun tipi void olmalıdır. C dilinde void tipinde bir fonksiyon şu şekilde tanımlanır:

void fonksiyonAdi(void) //parametresi olmayan bir void  fonksiyon tanımlaması
void fonksiyonAdi(int degisken1)//parametreli bir void fonksiyon tanımlaması

3) Bir C++ programında tüm fonksiyonların prototipi bulunmak zorundadır. Unutmayın C’de prototiplerin kullanımı önerilir, fakat bunların kullanımı teknik olarak isteğinize bağlıdır. C++’da ise prototipler gereklidirler. Diğer konunun örneklerinde de olduğu gibi sınıflara ait fonksiyonun prototipi aynı zamanda genel bir prototip olarak da rol oynar ve bu prototipten başka prototipe gerek kalmaz.

4) C ve C++ arasındaki bir fark da şıdır: Eğer fonksiyon C++’da, geriye değer gönderecek şekilde deklare edilmişse, bu fonksiyon, bu değeri göndermek zorundadır. Yani eğer fonksiyon void haricinde bir şey geri döndürüyorsa bu fonksiyonun içindeki herhangi bir return deyimi, bir değer içermelidir. C’de ise void içermeyen fonksiyonların aslında geriye değer döndürmesi şart değildir. Eğer fonksiyon herhangi bir değer döndürmüyorsa saçma bir değer “döndürülür”.

5) C’de fonksiyonun döndüreceği sonucun tipini tam olarak belirlemezseniz bu tipin tamsayı olduğu varsayılır. C++, “tamsayı kabulü” kuralını bozmaktadır. Bu yüzden tüm fonksiyonların return tipini tam olarak deklare etmeniz gerekir.

6) C++ programlarında sıkça karşılacağınız diğer bir fark da, yerel değişkenlerin deklare edilebileceği yerle ilgilidir. C’de yerel değişkenler sadece blokların başında herhangi bir “iş” deyiminden önce deklare edilebilir. C++’da yereş değişkenler her yerde deklare edilirler. Bu yöntemin avantajlarından biri, yerel değişkenlerin ilk kullanıldıkları yere yakın yerde tanımlanabilmesi ve böylelikle istenmeyen yan etkilerden kurtulunmasıdır.

7) Son değişiklik ise C++’ın bool veri tipini tanımasıdır. Bu veri tipi, Boolean (örn: doğru/yanlış) değerleri saklamak için kullanılır. C++ aynı zamanda true (doğru), false (yanlış) anahtar kelimelerini de tanır. bool tipi sadece bu iki değeri alabilir. C++’da karşılaştırma ve mantık işlemlerinin sonucu bool tipinde bir değerdirve tüm koşullu deyimler bir bool değeri almalıdır. İlk başta bu durum çok büyük bir değişiklikmiş gibi görünebilir, fakat durum böyle değildir. Hatta bu, gerçekte gözle bile görünmeyecek kadar küçük bir farktır, çünkü C’de true sıfır olmayan herhangi bir değerdir ve false 0’dır. Bu C++’da da geçerlidir, bir Boolean ifade kullanıldığında sıfır olmayan herhangi bir değer otomatik olarak true‘ya ve herhangi bir 0 değeri ise otomatik olarak false‘a dönüştürülür. Bunun tersi de doğrudur: Bir bool değeri bir tamsayı ifadede kullanılıldığında true 1’e, false da 0’a dönüştürüşür bool‘un eklenmesi daha fazla tip denetimi yapmamıza izin verir, Boolean ve tamsayı tiplerini bibirinden ayırmamızı sağlar. Tabi ki kullanımı isteğimize bağlıdır, fakat bool‘un oldukça kullanışlı olduğunu hatırlatmakta fayda var.

 

Örnekler:

1) Bu kısa C++ programı derlenemez, sum( ) fonksiyonunun prototipi yoktur.

#include <iostream>
using namespace std;

int main()
{
int a, b,c;
cout << "İki sayı girin";
cin >> a >> b;
c = sum (a, b);
cout << "Toplam: " << c;
return 0;
}

//bu fonksiyonun bir prototipi bulunmalı
int sum ( int a, int b){ 
return a+b;
}

2) Yerel değişkenlerin blok içerisinde herhangi bir yerde deklare edilebileceğinin gösterildiği örnek:

#include <iostream>
using namespace std;

int main()
{
int i; //bloğun başında deklare edilmiş yerel değişken

cout << "sayı girin: ";
cin >> i;

//faktöriyel hesapla
int j, fact=1; //iş deyiminden sonra deklare edilmiş değişkenler

for(j=i; j>=1; j--)
cout << "Faktöriyel " << fact;

return 0;
}

j ve fact‘in ilk kullanıldığı noktaya yakın yerde deklare edilmesi bu kısa örnekte pek önemli değildir. fakat büyük fonksiyonlarada değişkenlerin ilk kullanıldıkları yere yakın bir noktada deklare edilebilmesi için kodunuzun anlaşılırlığınızı artırır ve istenmeyen yan etkileri önler.

3) Aşağıdaki programda outcome adında bir Boolean değişken oluşturulmaktadır ve bu değişkene false değeri atanmaktadır. Sonra bu değişken bir if deyiminde kullanılmaktadır.

#include <iostream>
using namespace std;

int main()
{
bool outcome;
outcome = false;
if(outcome) cout << "true";
else cout << "false";

return 0;
}

Bu program çalıştırıldığında, sizin de tahmin edebileceğiniz gibi, ekranda false yazar.

 

Not: Bu yazı Herbert Schildt’in Teach Yourself C++ kitabından alıntıdır, çeviri: Dr. Cahit Akın.

 

Bir Cevap Yazın