C Syntax Sorusu...
-
Merhaba arkadaslar, Bir soru var aklima takildi? bir yardimci olsursaniz cok sevinirim ;)
int a=5;
int f1() { a=14; return 9;}
int f1() { a=11; return 2;}
Void f3() { a=f1() + a + f2();}
main() { f3();}
yukaridaki f3() te bir yan etki varmis, bunun ne oldugunu bulamadim, yardimci olsursaniz gercekten sevinirim. bir de nasil duzeltebilirsiz???
simdiden tesekurler...
-
Şuna bir bak?
http://www.hardwaremania.com/forum/yazilim/bilgisayar-programlama/genel-code/fonksyonlar-yan-etkiler-24012.html
-
Dj_DooM3 bunu yazdı:
-----------------------------
Merhaba arkadaslar, Bir soru var aklima takildi? bir yardimci olsursaniz cok sevinirim ;)
int a=5;
int f1() { a=14; return 9;}
int f1() { a=11; return 2;}
Void f3() { a=f1() + a + f2();}
main() { f3();}
-----------------------------yan etki f2() ve f1()'in a nın değerini değiştirmesi.
f3() çalıştıktan sonra fonksiyonlar soldan çalışmaya başladığı için önce f1() çalışır a=14 olur f1() 9 döndürür
bu durumda a=9+a+f2() olur.a=14 olduğundan a=9+14+f2() olur f2() çalışır.a nın değeri yine değişir ama en son f3() a yı değiştirdiği için bi önemi olmaz.
f2() 9 döndürür a=9+14+2 a=25 olur.
void f3() {a=a+ f1() + f2();} yaparsak düzelir
edit: düzelmiyomuş :) bende anlamadım önce fonksiyonlar çalışıyo her zaman
-
seretide bunu yazdı:
-----------------------------
Dj_DooM3 bunu yazdı:
-----------------------------
Merhaba arkadaslar, Bir soru var aklima takildi? bir yardimci olsursaniz cok sevinirim ;)
int a=5;
int f1() { a=14; return 9;}
int f1() { a=11; return 2;}
Void f3() { a=f1() + a + f2();}
main() { f3();}
-----------------------------yan etki f2() ve f1()'in a nın değerini değiştirmesi.
f3() çalıştıktan sonra fonksiyonlar soldan çalışmaya başladığı için önce f1() çalışır a=14 olur f1() 9 döndürür
bu durumda a=9+a+f2() olur.a=14 olduğundan a=9+14+f2() olur f2() çalışır.a nın değeri yine değişir ama en son f3() a yı değiştirdiği için bi önemi olmaz.
f2() 9 döndürür a=9+14+2 a=25 olur.
void f3() {a=a+ f1() + f2();} yaparsak düzelir
edit: düzelmiyomuş :) bende anlamadım önce fonksiyonlar çalışıyo her zaman
-----------------------------iyi denemeydi hocam :D eyvallah ugrastigin icin ;) henuz cozebilmis degilim :D
-
Sevgili kardeşim senin sorunun operatör önceliği konusunu anlamaman. Operatör önceliği konusu okuduktan sonra hangi operatörlerin öncelikli olduğunu bu tablodan inceleyebilirsin.. Eğer bir fonksiyona diğer fonksiyondan öncelik tanımak istiyorsan parantez operatörlerini kullanabilirsin..
Operator
Description Associativity
()
[]
.
->
++ --Parentheses (function call) (see Note 1)
Brackets (array subscript)
Member selection via object name
Member selection via pointer
Postfix increment/decrement (see Note 2)left-to-right
++ --
+ -
! ~
(type)
*
&
sizeofPrefix increment/decrement
Unary plus/minus
Logical negation/bitwise complement
Cast (change type)
Dereference
Address
Determine size in bytesright-to-left * / % Multiplication/division/modulus left-to-right + - Addition/subtraction left-to-right << >> Bitwise shift left, Bitwise shift right left-to-right < <=
> >=Relational less than/less than or equal to
Relational greater than/greater than or equal toleft-to-right == != Relational is equal to/is not equal to left-to-right & Bitwise AND left-to-right ^ Bitwise exclusive OR left-to-right | Bitwise inclusive OR left-to-right && Logical AND left-to-right || Logical OR left-to-right ?: Ternary conditional right-to-left =
+= -=
*= /=
%= &=
^= |=
<<= >>=Assignment
Addition/subtraction assignment
Multiplication/division assignment
Modulus/bitwise AND assignment
Bitwise exclusive/inclusive OR assignment
Bitwise shift left/right assignmentright-to-left ,
Comma (separate expressions) left-to-right - Note 1:
- Parentheses are also used to group sub-expressions to force a different precedence; such parenthetical expressions can be nested and are evaluated from inner to outer.
- Note 2:
- Postfix increment/decrement have high precedence, but the actual increment or decrement of the operand is delayed (to be accomplished sometime before the statement completes execution). So in the statement y = x * z++; the current value of z is used to evaluate the expression (i.e., z++ evaluates to z) and z only incremented after all else is done. See postinc.c for another example.
-
Dj_DooM3 bunu yazdı:
-----------------------------
Merhaba arkadaslar, Bir soru var aklima takildi? bir yardimci olsursaniz cok sevinirim ;)
int a=5;
int f1() { a=14; return 9;}
int f1() { a=11; return 2;}
Void f3() { a=f1() + a + f2();}
main() { f3();}
yukaridaki f3() te bir yan etki varmis, bunun ne oldugunu bulamadim, yardimci olsursaniz gercekten sevinirim. bir de nasil duzeltebilirsiz???
simdiden tesekurler...
-----------------------------Void keywordu void olarak yazılır... Sorduğun yan etkiye gelecek olursak, f3() fonksiyonu cağrılğında, önce f1() fonksiyonu çağrılır, f1 fonksiyonu içersinde gloabal a değişkeni güncellenerek 14 değeri atanır, f1 fonksyionu da geri dönüş değeri olarak 9 değerini gönderir. Daha sonra f2() fonksiyonu çağrılır oradada geri önüş değeri olarak 2 döndürülür. Bunu kod üzerinden anlatacak olursam;
void f3() {
a = f1()+ a + f2();
// 9 + 14 + 2
}
buradaki a ifadesi, f1 den sonra yazıldığı için değeri 14 tur.. eğer f2 den sonrada yazilsa idi değeri 11 olacakti yani,
void f3() {
a = f1()+ a + f2() + a;
// 9 + 14 + 2 + 11
}
Yan etki kavrami da su... a değerinin de sürekli guncelleniyor olmasi.. Umarim anlatabilmişimdir. Anlamadıysan PM ile ulaş bana.. Selametle... -
kodunu şu sekilde yazarsan a nin değişimini de inceleyebilrsin..
#include <stdio.h>
#include <stdlib.h>
int a = 5;
int f1() {
a = 14;
return 9;
}
int f2() {
a = 11;
return 2;
}
void f3() {
a = f1() + a + f2();
}
int main()
{
f3();
printf("a = %d",a);
getchar();
return 0;
}
