Forum: Diğer Konular RSS
C/C++ Değişken Argümanlar Nedir?
İbrahim #1
Üye Eki 2015 tarihinden beri · 156 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: C/C++ Değişken Argümanlar Nedir?
Selamün Aleyküm;
Android kaynak kodlarını incelerken şuna benzer bir kod gördüm:
void error(const char* fmt, ...)
{
  va_list(ap);
  // ...
}
Bu kullanımı internetten araştırdım ve değişken argümanlar olarak bilindiğini gördüm. Acaba bu yapı tam olarak nasıl kullanılıyor? Ayrıca bilinmeyen sayıda argüman verilebilecekse, herhangi bir dizi tanımlayıp verileri alabiliriz. Bu şekilde kullanım ile dizi kullanımı arasında ne gibi farklar olur?
Teşekkürler!
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Bu olanak, işlevlerin printf'te olduğu gibi farklı sayıda ve farklı türden parametre alabilmelerini sağlar.

Parametrelerin türleri yerine ... verildiğinden, çağıran ile işlevin iyi anlaştıkları konusunda derleyici hiçbir güvence veremez. Örneğin, printf(duzen_dizgisi, 1.5) çağrıldığında duzen_dizgisi'nin bir sonraki parametre değerini kesirli sayı olarak tarif ettiğini düşünürüz ve belki de öyledir ama bundan emin olamayız. (Bundan ancak düzen dizgisi sabit olarak verilmişse emin olabiliriz ve çoğu derleyici o durumda parametre değerlerine ve düzen dizgisine bakarak denetim yapar.)

Kabaca, şöyle kullanılıyor:

1) İşlev, parametre okuma işlemini va_start ile başlatır

2) İşlev, sıradaki parametrenin tam olarak ne türden olduğunu bir şekilde bilir ve değeri va_arg ile edinir

3) İşlevden çıkılmadan önce va_end çağrılmalıdır

İbrahim:
bilinmeyen sayıda argüman verilebilecekse, herhangi bir dizi tanımlayıp verileri alabiliriz. Bu şekilde kullanım ile dizi kullanımı arasında ne gibi farklar olur?

Dizi de iyi bir yöntemdir ve D'de de yaygın olarak kullanılır:

  http://ddili.org/ders/d/parametre_serbestligi.html#ix_para…

Farkı, dizi bilinmeyen sayıda parametre sağlar ama hepsinin belirli bir türden olmaları gerekir. Variadic arguments ise çağrıdan çağrıya bile farklı olan türlerle çağrılmayı sağlar. Örneğin, printf int, double, vs. türlerle ve bunların her farklı sırada kullanımı ile çağrılabilir.

Ali
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-18, 17:25:35 (UTC -08:00)