Değişken sayıda variable olan fonksiyonda hata

Başlatan strom, 12 Ocak 2011, 15:38:43

strom

Kendi printf fonksiyonumu yazmak için keil'de değişken sayıda değişken alan fonksiyonları kullanmaya çalışıyorum.Printf fonksiyonu tarafı gayet düzgün çalışmasına rağmen çağırıcıda ufak bir hata oluyor.Son değişkeni almıyor.Mesela;
   printf("Deneme", (int) 2, (int) 5, (int) 7);
diye yapılan bir çağrıda 7 değeri belleğe atılmıyor.
   printf("Deneme", (int) 2, (int) 5);
şeklinde yapılırsada 5 değeri belleğe atılmıyor.
Ancak printf'de bu değerleri çeken kısım, belleğin durumunu debugda incelediğime göre, düzgün çalışıyor.İlk örnekte 7'nin atılması gereken yerdeki alakasız bir tam sayıyı çekiyor.
Bu işlemi PIC'de sorunsuz kullanıyordum.Acaba nereyi atlıyor olabilirim?

Burak B

#1
Alıntı Yapprintf("Deneme", (int) 2, (int) 5, (int) 7);

Bu senin yazdığın fonksiyonun kullanım şeklimi KEIL' in printf ini kullanım şeklin mi ?

Benim bildiğim printf

printf("Deneme %d, %d, %d", (int) 2, (int) 5, (int) 7);


şeklinde kullanılır. Bu şekilde printf verilen metni tarayarak argüman sayısını bulur ve ona göre parametrelerin geçildiği bellekten veya stackden gerekli değerleri alır ve belirtilen formatta gösterir. Aksi halde arguman değişkenleri tutan belleğin miktarını ne ile bildiriyorsun fonksiyona ? Ayrıca printf gibi fonksiyonlardan önce veya sonra bir stack düzenlemesi olması gerekiyor. Dolayısyla stacke dikkat etmeni öneririm.
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

strom

Hocam bu benim printf'im.Şimdilik prototip olduğu için argüman sayısını kendim ayarlıyorum.Daha sonra argüman sayısını, string içerisindeki %d'ler ile hesaplayacam.Daha anlaşılır olması için printf fonkiyonumuda yazim;
void printf(const char *ch, ...){

   va_list param;
   va_start(param, ch);

       int i = va_arg(param, int);
       int j= va_arg(param, int);
       int k = va_arg(param, int);

   va_end(param);
}

işte tam burda k değeri düzgün alınmıyor