- Katılım
- 24 Şubat 2018
- Mesajlar
- 24,633
C++ programlama dili, C nin sağladığı bütün olanakları sağlar. Ama C'de derleyicinin sorun çıkarmadan izin verdiği birçok riskli program yapısı, C++ derleyicisinde hatayla sonuçlanır. Örneğin şu aşağıdaki C programını inceleyelim:
Burada int olan bir pointer'a 1000 byte büyüklüğünde ayrılan bir buffer adresini atıyoruz, sonra da pointer'in değerini ekrana yazdırıyoruz. Bunu C ve C++ derleyicileri ile derliyoruz. Derlerken de özellikle bütün uyarı mesajlarını etkin duruma getiriyoruz (-Wall, enable all warnings)
Görüldüğü gibi, C derleyicisi bir uyarı bile üretmezken, C++ derleyicisi direkt olarak HATA VERİYOR. Bu iyi birşey. Böyle bir dönüşümü gerçekten amaçlıyorsanız, özel dönüştirme operatörü kullanmanız gerekir.
Kod:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int* a = malloc(1000);
printf("a = %p\n", a);
}
Burada int olan bir pointer'a 1000 byte büyüklüğünde ayrılan bir buffer adresini atıyoruz, sonra da pointer'in değerini ekrana yazdırıyoruz. Bunu C ve C++ derleyicileri ile derliyoruz. Derlerken de özellikle bütün uyarı mesajlarını etkin duruma getiriyoruz (-Wall, enable all warnings)
Kod:
[ta@bonsai ~]$ gcc -Wall a.c
[ta@bonsai ~]$
[ta@bonsai ~]$ g++ -Wall a.c
a.c: In function ‘int main()’:
a.c:6:19: error: invalid conversion from ‘void*’ to ‘int*’ [-fpermissive]
int* a = malloc(1000);
Görüldüğü gibi, C derleyicisi bir uyarı bile üretmezken, C++ derleyicisi direkt olarak HATA VERİYOR. Bu iyi birşey. Böyle bir dönüşümü gerçekten amaçlıyorsanız, özel dönüştirme operatörü kullanmanız gerekir.
Kod:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int* a = static_cast<int*>(malloc(1000));
printf("a = %p\n", a);
}
[ta@bonsai ~]$ g++ -Wall a.cpp
[ta@bonsai ~]$
Son düzenleme: