include edilen kütüphanedeki mükerrer kütüphanelern sor

Başlatan tyilgin, 09 Ocak 2008, 09:40:55

tyilgin

Arkadaşlar  fonksiyondan string değer döndürmek konusunda bir sorunum kalmadı. Cevaplarınız için ayrı ayrı teşekkür ederim..

Her sorum için başka bir konu açarak forumu doldurmamak için burada devam etmek istiyorum.

proje dosyamdaki bazı bölümleri ayrı bir c dosyasında tutarak ana programın içine include ile ekliyorum. ancak bir kütüphane 2 ayrı c dosyasında da olunca "Multiply defined" hatası veriyor. #ifdef kullanmayı düşündüm ancak onunlada neyi kontrol edeceğimi bilemedim.

örneğin delay.c kütüphanesini hem ana kodda hemde alt kodlarda tanımladığımda bu sorun ortaya çıkıyor.

sizce nasıl bir yol izlemeliyim ?

parda

Merhaba;

Bu iş C de en güzel pointer ile yapılır (C ++ kullanıyor isen string class tabiki daha iyi)
örneğin

void fonkadi(char *cDonecek)
{
*(cDonecek) = 'a';
*(cDonecek+1) = 'b';
*(cDonecek+2) = 'c';
*(cDonecek+3) = '\0';
}

-----
char[10] cStr;

fonkadi(&cStr);//cStr="abc";

pointer konusunu irdelersen kendine ve amacına daha uygun bir yol bulabilirsin

Not: Kullandığın derleyici farklılık gösterebilir derleyicinin dökümanlarını inceleyin

kolay gelsin
Bildiğim tek şey, hiç bir şey bilmediğimdir.

burak_82

char* fonksiyon(void) şeklinde tanımlayıp pointer olarak geri dönebilirsin. Bu pointeri de dizi olarak kullanabilirsin.

tyilgin

Arkadaşlar cevaplarınız için teşekkür ederim.

Derleyicim Hi-tech C 9.50

Aşağıdaki kod bu haliyle sorunsuz çalışıyor. Ancak fonksiyonu çağırırken değişkenin başındaki "&" karakterini koyarsam "Redurant "&" applied to array" hatası veriyor. & karakterini koymayarak, bu haliylede sorun çıkartmıyor ama ilerde sorun yaşayailirmiyim sizce ?

#include	<pic.h>
#include	<delay.c>
#include	"LcdSurucu.h"

unsigned char veri[10];

void fonkadi(char *cDonecek)
{ 
	*(cDonecek) = 'a'; 
	*(cDonecek+1) = 'b'; 
	*(cDonecek+2) = 'c'; 
	*(cDonecek+3) = '\0'; 
}

void main() {
	DelayMs(200);
	
	lcd_init();
	lcd_goto(0);
	lcd_puts("Deneme");
	
	fonkadi(veri);
	lcd_goto(0x40);
	lcd_puts(veri);
	
	while(1);
}

parda

Derleyici farklılıklarından kastım buydu sorun yaşayacağını sanmıyorum.

Başarılar
Bildiğim tek şey, hiç bir şey bilmediğimdir.

arslan74

Alıntı yapılan: "parda"Merhaba;

Bu iş C de en güzel pointer ile yapılır (C ++ kullanıyor isen string class tabiki daha iyi)
örneğin

void fonkadi(char *cDonecek)
{
*(cDonecek) = 'a';
*(cDonecek+1) = 'b';
*(cDonecek+2) = 'c';
*(cDonecek+3) = '\0';
}

-----
char[10] cStr;

fonkadi(&cStr);//cStr="abc";

pointer konusunu irdelersen kendine ve amacına daha uygun bir yol bulabilirsin

Not: Kullandığın derleyici farklılık gösterebilir derleyicinin dökümanlarını inceleyin

kolay gelsin

Merhaba,

Arkadaş burada ufak, ama önemli bir hata yapmış.

Yazı tutan diziler.

örneğin;
unsigned char yazi1[]="deneme yazisi 1";


Şeklinde bir yazının başlangıc adresini(pointer) iki türlü tanımlayabilirsiniz. Birinci yol dizilerin ismini adres yerine geciyor, doğrudan dizinin isnin kullanabilirsin.
İkinci yol dizinin sıfırıncı elemanın adresini gecebilirsiniz. Her iki kullanımda olabilir. Ancak arkadaşımız burada dizi isminin başına adres operatörü kullanmış. Bu da şu adresin adrsi anlamına geldiği için hata veya uyarı verir.
Aşağıdaki gibi kullanabilirsiniz.


unsigned char yazi1[]="deneme yazisi 1";

unsigned char *pointer;

poniter = yazi1;

poniter = &yazi1[0];


lcd_puts("Deneme");

lcd_puts(yazi1);

lcd_puts(&yazi1[0]);

lcd_puts(pointer);

pointer = " test2";

lcd_puts(pointer);



şekline kullanılabilir.


Selamlar

tyilgin