Bir C / C++ kodunu birden fazla platformda sorunsuz derleyebilme

Başlatan mami96, 20 Mayıs 2013 - 14:30:28

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

mami96

Selam arkadaslar. Bu konuyu actim kod degisikligi yapmak durumunda kalan arkadaslar olmasin diye. Soyle diyebilirim

Windows altinda yazilan bi C / C++ kodu yuksek ihtimalle buraya aynen tasininca bazi tip hatalar verecektir. Kimi kutuphaneler bulunmayacak bundan mutevellit olarak da o kutuphanelerin kullandigi gomulu fonksiyonlar calistirilamayacak ve hata verecektir. Bu durumlarda yapacagimiz sey aslinda cok basit. Yapilacak islem, OS yani ISLETIM SISTEMINI algilamak olacak. Bunun icin C / C++ faydali ve cok basit bi fonksiyon vermekte. Ornegin Linux altinda derleme yapacaksak


#if defined(__linux__)
#include<stdio.h>
main(){int ara,final,ort;
char isim[10],soyad[10];

printf("Name: ");
scanf("%s",isim);
printf("Lastname: ");
scanf("%s",soyad);
printf("ara sinav notu: ");
scanf("%d", &ara);
printf("Final Notu: ");
scanf("%d",&final);
ort=((ara*30)/100)+((final*70)/100);
printf("__KARNE__\n%s %s \nortalama= %d",isim,soyad,ort);
if(ort>=60)
{printf("\ngecti");}
else
{
     
     printf("\nkaldi");}



}
#endif


Gibi bir kod yaparız ve derleme esnasında bu kısım o anki İŞLETİM SİSTEMİ ile uyumlu ise derlenir. Sadece bu ihtimali göz önüne alırsak eğer bu kodu Windows altında derlemeye çalışmak yine bi ölümcül hata fırlatır. Bunun için de şöyle yaparız


#if defined(_WIN64)
#include <conio.h>
#include<stdio.h>

//C / C ++ KODLARINIZ
getch();


#elif defined(_WIN32)
#include <conio.h>
#include<stdio.h>

// C / C++ KODLARINIZ
getch(); 
#endif


Win32 ve Win64 mimarileri icin de algilamis olduk su anda bizim yazdigimiz kod bu sekle burundu


#if defined(_WIN64)
#include <conio.h>
#include<stdio.h>

//C / C ++ KODLARINIZ
getch();


#elif defined(_WIN32)
#include <conio.h>
#include<stdio.h>

// C / C++ KODLARINIZ
getch(); 
#endif


#if defined(__linux__)
#include<stdio.h>
main(){int ara,final,ort;
char isim[10],soyad[10];

printf("Name: ");
scanf("%s",isim);
printf("Lastname: ");
scanf("%s",soyad);
printf("ara sinav notu: ");
scanf("%d", &ara);
printf("Final Notu: ");
scanf("%d",&final);
ort=((ara*30)/100)+((final*70)/100);
printf("__KARNE__\n%s %s \nortalama= %d",isim,soyad,ort);
if(ort>=60)
{printf("\ngecti");}
else
{
     
     printf("\nkaldi");}



}
#endif


Ben bu dosyami ali.c olarak kaydettim derleme icin terminal'e


gcc -o ali ali.c
./ali


seklinde yazip programi derledim ve Windows'a ayrilmis olan kodlarda herhangi bi hata cikmadi. Sizler de boyle yapabilirsiniz derleyici o anki sisteme uymayan kodlari if tanimlamalari arasinda gordugu icin hata firlatmaz.

Kodlama yaparken önerim ise ayni kodu her mimari icin yazin. Örnek verecek olursak şu konuda;

http://forum.ubuntu-tr.net/index.php?topic=39203.0

conio.h kutuphanesinin yoklugundan bahsedilmis. İste bu gibi derleme hatalarinin onlenmesi icin her sistemin yapisina gore kutuphaneleri ve kodlari if, elif defined seklinde tanimlamalarin arasina alabilirsiniz.

+Peki baska isletim sistemi on ekleri var mi?

- Evet var onlari da siralayacak olursak eger;


_AIX => IBM kullanır

**********************

__unix__ => UNIX icindir.

**********************

BSD => FreeBSD vs. icindir

**********************

__APPLE__ => APPLE

**********************

__MACH__ MAC yine ayni

**********************

__HPUX => HP ya da Hewlett-Packard dedigimiz

**********************

__linux__ => Canimiz cigerimiz Linux

**********************

__sun => Solaris

**********************

__SVR4 => Solaris

**********************

__CYGWIN__ => Windows // MS Windows altindaki POSIX standartlarina girer

**********************

_WIN64 => Windows 64 Bit mimarisi icin

**********************

_WIN32 => Windows 32 Bit mimarisi icin


Anlatim bu kadardir. Kolay gelsin. Konuda kullanilan ornek kod

http://forum.ubuntu-tr.net/index.php?topic=39203.0 Bu konudaki ilk mesajdan alintilanmistir

İyi programlamalar.

sem

Ufak çaplı ya da standartlardan çok az derecede sapan projeler için düşünebilir. Tabi aslında fark ettiyseniz her platform için yine ayrı kod yazmış oluyoruz.


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 22 Mayıs 2013 - 01:23:47

Teşekkürler bu arada bu işe yarar bilgi için. Bunu söylemeyi unutmuşum. 
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?