Tam Sürümünü Görmek İçin : C DE ÇOKLU SOURCE CODE--> NASIL ??
Akın Öcal
24/04/2005, 13:29
Herkese selamlar...
C 'de birden fazla kaynak kodu beraber kullanmak nasıl oluyor ? Beraber kullanma derlerken mi yoksa runtime da mi ortaya çikiyor. Ve de teknik olarak nasil uygulayacağımı anlatırsanız çok sevinirin. Kullandığım IDE Borland C/C++ 5.02. Ayrıca hangi uygulamalarda tercih ediliyor ?
lord_caine
25/04/2005, 10:47
diger kaynak kodlarini farkli header dosyalarinda tutabilirsin.dosya.h ismiyle kaydedip ana cpp dosyanda basinda
#include "c:\\deneme.h" gibi ana cpp dosyana kutuphane olarak cagırırsın. H dosyalari derleme esnasında degerlendirilir
Akın Öcal
25/04/2005, 21:40
Ok sağolun denedim. Mesela bir kendim bir fonksiyon yazıp onu header file yapıp , main i kullandığım ana kaynak kodda include edip yarattğığm header daki fonksiyonu çağırıp kullandım. Fakat tam bu noktada
" Cannot create precompiled header " gibi bir warning aldım. Bu uyarı mesajının bana iletmek istediğini anlayamadım. Benim header içinde yazdığım kodda bir sorun yok. Belki header file oluşturuken yapılması gerekenleri bilmiyor olmamdan kaynaklanabilir mi ?
/etc/lib/ gibi bir yerdi sanırım Gnu'da path'i..
Ok sağolun denedim. Mesela bir kendim bir fonksiyon yazıp onu header file yapıp , main i kullandığım ana kaynak kodda include edip yarattğığm header daki fonksiyonu çağırıp kullandım. Fakat tam bu noktada
" Cannot create precompiled header " gibi bir warning aldım. Bu uyarı mesajının bana iletmek istediğini anlayamadım. Benim header içinde yazdığım kodda bir sorun yok. Belki header file oluşturuken yapılması gerekenleri bilmiyor olmamdan kaynaklanabilir mi ?
header dosyaları sadece declare için kullanılmalı,
mesela otomobil.h de declare edilen fonksiyonlar otomobil.cpp de tanımlanmalı.
sadece fonsiyon kullanıyorsan sınıf kullanmıyorsan ve onları ayrı bir dosyada derlemek istiyorsan, header kullanma.
doğrudan otomobil.cpp olarak yaz, sonra main dosyasının başında extern olarak declare edersin.
Diyelim ki asagidakine benzer main.c diye bir kaynak dosyan var
#include <stdio.h>
int main(void)
{
return 0;
}
ve diyelim ki topla.c diye ikinci bir kaynak dosyan var ve bu dosyada bir fonksiyon tanimladin
int toplama(int x, int y)
{
return x + y;
}
bu noktada syntax kontrol etmenin disinda bir faydasi olmasa bile arzu edersen bu dosyalari ayri ayri compile edebilirsin fakat bizim istedigimiz topla.c de tanimladigimiz fonksiyonu main.c de kullanmak oldugu icin butun yapmamiz gereken main.c dosyasinda include ifadelerinden sonra function prototype (galiba turkcesi fonksiyon sablonu) dedigimiz bir satir eklemek ve toplama fonksiyonu kullanima hazir.
#include <stdio.h>
// Prototype
int toplama(int x, int y);
int main(void)
{
printf("%d\n", toplama(3,5));
return 0;
}
Derlerken mi runtime mi sorusuna gelince cevap her ikiside. Prototype kullanmanin amaci derleyicine bu isimde bu parametrelerle falanca veri turu donen bir fonksiyon tanimi oldugunu onceden bildirmek boylece executable code uretirken derleyicin bu fonksiyonu bulup programina ekleyebilir, aksi takdirde derleyici ne yapacagini bilemeyecegi icin hata verecektir.
Bu arada siz C diye sordugunuz icin C olarak ornek verdim ama C++ kullanmis olsaydik degisen bir sey olmayacakti mantik ayni.
Akın Öcal
26/04/2005, 09:53
header dosyaları sadece declare için kullanılmalı,
mesela otomobil.h de declare edilen fonksiyonlar otomobil.cpp de tanımlanmalı.
sadece fonsiyon kullanıyorsan sınıf kullanmıyorsan ve onları ayrı bir dosyada derlemek istiyorsan, header kullanma.
doğrudan otomobil.cpp olarak yaz, sonra main dosyasının başında extern olarak declare edersin.
Teşekkürler bilgiler için. Şu an sadece C'yle uğraştığım için zaten class larla işim olmuyor ama dediğiniz doğrultusunda tanımladığım veriyapılarını,makroları...
header içinde kullanırım.
Fakat fonksiyonlar konusunda başka kaynak dosyayla çalışmayı beceremedim. :aglama:
Main.cpp ve otomobil.cpp dosyalarını oluşturuyorum. (Aynı klasörde) Main.cpp de , otomobil.cpp içinden çağıracağım "function" adlı fonksiyonun prototip bildirimini yapıyorum. Tabi prototip bildirimin başına extern belirleyicisini ekliyorum. Fakat main.cpp i derlediğim zaman ;
Error: Error: Unresolved external 'function(int,int)' referenced from C:\MAIN.OBJ
Burada ne gibi bir acemilik yaptığım konusunda da beni aydınlatırsanız çok sevinirim.
Euclides
26/04/2005, 10:28
derleyici doğru söylüyor...
böye dene
benimderleyicim -zavazingo test1.c test2.c test3.c
benimlinkerim -zavazingo test1.obj test2.obj test3.obj
Main.cpp ve otomobil.cpp dosyalarını oluşturuyorum. (Aynı klasörde) Main.cpp de , otomobil.cpp içinden çağıracağım "function" adlı fonksiyonun prototip bildirimini yapıyorum. Tabi prototip bildirimin başına extern belirleyicisini ekliyorum. Fakat main.cpp i derlediğim zaman ;
Error: Error: Unresolved external 'function(int,int)' referenced from C:\MAIN.OBJ
Burada ne gibi bir acemilik yaptığım konusunda da beni aydınlatırsanız çok sevinirim.
komut satırından kullanıyorsan Euclides dedikleri..
ama benim tahiminim sen bir IDE kullanıyorsun ve bu dosyaları Proje olarak değil ayrı ayrı dosyalar olarak derliyorsun, hata burada.
proje oluşturursan, IDE yukarıdakileri otomatik olarak yapar.
c kullanıyor olsan bile, derleyicin c++ dan anlıyordur.
eğer ileride ad kirliliği problemi yaşamak istemiyorsan en azından fonksiyonlarını namespace ile paketle. o zaman, fonksiyon deklarasyonlarını namespace içinde headerlere eklersin, çok daha sağlam bir dizayn olur.
örnek:
monitor::powerOn(), printer::powerOn()...
monitor::vendor ="" .... , printer::vendor ="".. yukarıda powerOn fonsiyonları ve vendor değişkenleri birbiriyle karışmaz.
Akın Öcal
26/04/2005, 17:50
Evet ilk mesajımda yazdığım gibi Borland c/c++ 5.02 kullaniyorum geliştirme ortamı olarak. Bir project açmam lazım o zaman. Cevaplar için herkese teşekkür ederim.
Bu arada başka konuya girmiş olacağım ama linux altında C/C++ için hangi ide yi tavsiye edersiniz ? KDevelop un methini duydum ama halen kullanmış değilim. Ben ise linux olarak mandrake 10.1 community sürümünü kullanıyorum.
Forum Yazılımı : vBulletin v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.