08.11.2014 Views

c_kitap

c_kitap

c_kitap

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

C ve Sistem Programcıları Derneği - C Ders Notları - Necati Ergin<br />

Bu makro va_list türünden değişkenle ilgili son işlemleri yapar.<br />

int add_all(int val, ...)<br />

{<br />

va_list va_p;<br />

int sum = 0;<br />

va_start(va_p, val);<br />

}<br />

while (val != -1) {<br />

sum += val;<br />

val = va_arg(va_p, int);<br />

}<br />

va_end(va_p);<br />

return sum;<br />

Sistemlerin çoğunda va_end makrosu karşılığında bir şey yapılmaz. Yani uygulamalarda<br />

bu makro çağırılmasa da yapılan işlemde değişiklik olmaz.<br />

Bu durum GNU derleyicisinde her zaman doğrudur.<br />

Yine de okunabilirlik, güvenlik ve taşınabilirlik açılarından bu makronun çağrılması doğru<br />

tekniktir.<br />

İstenirse birden fazla argüman listesi göstericisi kullanılabilir. Bu durumda argüman<br />

göstericilerinin her birine va_start makrosu ile ayrı ayrı ilkdeğerleri verilmelidir.<br />

Göstericilerden herhangi biri ile işleve gönderilen argümanlar elde edilebilir.<br />

Değişken Sayıda Argüman Alan İşlevlere Yapılan Çağrılar<br />

Değişken sayıda argüman alan işlevlere yapılan çağrılar derleyici tarafından özel biçimde<br />

değerlendirilir. int altı türlerden olan argümanlar otomatik olarak int türüne yükseltilir.<br />

float türünden olan argümanlar double türüne yükseltilir:<br />

#include <br />

int add_all(int val, ...);<br />

int main()<br />

{<br />

short sh = 5;<br />

printf("toplam1 = %d\n", add_all(23, 12, 30, 14, -1));<br />

printf("toplam2 = %d\n", add_all('A', 10, sh, 20, 30, 40, -1));<br />

}<br />

return 0;<br />

Şimdi kendisine adresleri gönderilen yazıları birleştirecek ve değişken sayıda argümanla<br />

çağırılabilecek bir işlev tanımlanıyor:<br />

#include <br />

#include <br />

#include <br />

#define BUFFER_SIZE 1000<br />

char *con_strings(const char *ptr, ...)<br />

{<br />

va_list ap;<br />

527

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!