C hakkında bir soru

ysnclskn

Üye
Katılım
8 May 2009
Mesajlar
417
Puanları
1
Yaş
36
Kaan Aslan'ın A'dan Z'ye C Klavuzu adlı kitabının birinci baskısında bir örnek ile karşılaştım.
#include <stdio.h>
int topla(int x, int y)
{
x=100;
y=5;
return x+y;
}
void main ()
{
int a=10,b=20,c;
c=topla(a,b);
printf("c=%d\n",c);
}
şeklinde yazılan programın c=30 ile geri döneceği yazıyor. Ancak derleyince c=105 ile geri dönüyor. Acaba bu benim derleyicimden mi kaynaklanıyor; yoksa kitapta bir hata mı var? Bu bir hata ise elinde bu kitabın diğer baskısı olanlar kontrol edebilirler mi bu hata düzeltilmiş mi diye? 8.5 PARAMETRE AKTARIM KURALI adlı bölüm.
 
Moderatör tarafında düzenlendi:
int topla(int x, int y)
{
x=100;
y=5;
return x+y;
}

Buradaki

x=100;
y=5;

den dolayı sen a ve b için ne gönderirsen gönder sonuç hep 105 olacaktır.

programın doğrusu
int topla(int x, int y)
{
return (x+y);
}

olmalı.
 
int topla(int x, int y)
{
x=100;
y=5;
return x+y;
}

Buradaki

x=100;
y=5;

den dolayı sen a ve b için ne gönderirsen gönder sonuç hep 105 olacaktır.

programın doğrusu
int topla(int x, int y)
{
return (x+y);
}

olmalı.

Programın o şekilde yazılıyor olduğunu biliyorum; ancak üstte yazdığım şekilde yazılınca da yine c=30 cevabını veriyor olması gerekiyormuş kitapta yazan bu; zaten yazdığınız şekilde olanı da mevcut iki durumu kıyas ediyor. Merak ettiğim konu bu.
 
Kod:
#include <stdio.h>
int topla(int x, int y)
{
	return x+y;
}
void main ()
{
	int a=10,b=20,c;
	c=topla(a,b);
	printf("c=%d\n",c);
}
Sn. ysnclskn,

Siz kodu o şekilde yazarak, hem fonksiyonu işlem yapması için çağırıyorsunuz hem de değerini döndürmesini istiyorsunuz. Eğer x ve y değişkenlerinin başlangıç değerlerini silerseniz, "return x+y;" siz fonksiyonu nerede kullanırsanız ona göre değer gönderir.

Yukarıdaki kodu derleyicinize yazarsanız ne demek istediğimi anlayacaksınız.

Hala problem yaşıyorsanız, lokal ve global değişkenlere de bir göz atmanızı tavsiye ederim, belki yardımcı olur.
 
Kod:
#include <stdio.h>
int topla(int x, int y)
{
	return x+y;
}
void main ()
{
	int a=10,b=20,c;
	c=topla(a,b);
	printf("c=%d\n",c);
}
Sn. ysnclskn,

Siz kodu o şekilde yazarak, hem fonksiyonu işlem yapması için çağırıyorsunuz hem de değerini döndürmesini istiyorsunuz. Eğer x ve y değişkenlerinin başlangıç değerlerini silerseniz, "return x+y;" siz fonksiyonu nerede kullanırsanız ona göre değer gönderir.

Yukarıdaki kodu derleyicinize yazarsanız ne demek istediğimi anlayacaksınız.

Hala problem yaşıyorsanız, lokal ve global değişkenlere de bir göz atmanızı tavsiye ederim, belki yardımcı olur.

Ya ben derdimi anlatamadım veyahut siz anlayamıyorsunuz. Bahsettiğiniz program ile yazdığım programın kıyasından bahsetmiştim. Her neyse yine de verdiğiniz cevaplar için teşekkür ederim. Sorunun derleyiciden kaynaklandığını başka programların sonuçlarını da görerek anladım. Ufak nüanslar var. Herkese iyi çalışmalar dilerim.
 
gcc ile derleyince de 105 donuyor. Bence boyle olmasi daha mantikli
 

Forum istatistikleri

Konular
128,314
Mesajlar
916,619
Kullanıcılar
450,148
Son üye
AİŞTAR

Yeni konular

Geri
Üst