YK>> éÍÅÎÎÏ Ï ÜÔÏÍ Ñ É ÇÏ×ÏÒÉÌ, ÞÔÏ ÐÉÓÁÔØ ÎÁÄÏ _ÁËËÕÒÁÔÎÏ_. HZ> ôÙ, ËÁË ×ÓÑËÉÊ ÍÕÖÉË, ÚÁÄÎÉÍ ÕÍÏÍ ËÒÅÐÏË! ô.Å. ÏÂßÑÓÎÑÔØ ÐÒÉÞÉÎÕ HZ> ÐÒÏÉÚÏÛÅÄÛÅÇÏ ÔÙ ÇÏÒÁÚÄ!! HÏ ÅÓÔØ Õ×ÅÒÅÎÎÏÓÔØ, ÞÔÏ ËÏÇÄÁ ×ÏÚÎÉËÎÕÔ ÇÒÁÂÌÉ HZ> Ó HZ> ÍÁËÒÏÓÁÍÉ, ÔÏ ÔÙ, ËÁË É ×ÓÅ, ÂÌÁÇÏÐÏÌÕÞÎÏ ÎÁÓÔÕÐÉÛØ ÎÁ ÎÉÈ!!!
HZ> ÷ ÕÞÅÂÎÉËÁÈ ÎÅ ÜÔÏÔ ÐÒÉÍÅÒ ÐÒÉ×ÏÄÉÔÓÑ, Á ÐÒÉÍÅÒ Ó ÎÉÚËÏÐÒÉÏÒÉÔÅÔÎÙÍÉ HZ> ÏÐÅÒÁÃÉÑÍÉ ÔÉÐÁ: HZ> #define doubling(x) x+x HZ> ÇÄÅ ×Ï ÉÚÂÅÖÁÎÉÅ ÐÒÏÂÌÅÍ ÒÅËÏÍÅÎÄÕÀÔ ÓËÏÂËÉ ÉÓÐÏÌØÚÏ×ÁÔØ. á ÔÕÔ HZ> ÕÍÎÏÖÅÎÉÅ. HZ> üÔÏ ÒÁÚ.
á × ÕÞÅÂÎÉËÁÈ ÎÁÐÉÓÁÎÏ, ÞÔÏ ÍÁËÒÏÓÙ ôåëóô ïâòáâáôù÷áàô, Á ÎÅ C-ÛÎÙÅ ×ÙÒÁÖÅÎÉÑ, É ÞÔÏ Ï ÜÔÏÍ ÎÕÖÎÏ ÈÏÒÏÛÏ ÄÕÍÁÔØ ÐÒÉ ËÁÖÄÏÍ ÉÓÐÏÌØÚÏ×ÁÎÉÉ ÍÁËÒÏÓÁ? ÷ÒÏÄÅ ÄÁ. ïÔÓÀÄÁ É ×ÓÅ ÇÒÁÂÌÉ.
HZ> int b = SQUARE(f()); HZ> ðÏÌÕÞÉÛØ ÓÏ×ÓÅÍ ÎÅ ÔÏ, ÞÔÏ ÏÖÉÄÁÅÛØ! é ÇÒÁÂÌÅÊ ÔÁËÉÈ ÔÁÍ ÍÏÒÅ. é HZ> ÚÁÍÁÅÛØÓÑ
ñ ÐÏÞÅÍÕ-ÔÏ ÏÖÉÄÁÀ ÐÏÄÓÔÁÎÏ×ËÉ ×ÍÅÓÔÏ SQUARE ÞÅÇÏ ÔÁÍ × define ÐÏÎÁÐÉÓÁÎÏ. åÓÌÉ ËÔÏ-ÔÏ ÏÖÉÄÁÅÔ, ÞÔÏ ÍÁËÒÏÓ ÄÏÌÖÅÎ ×ÅÓÔÉ ÓÅÂÑ ËÁË C-×ÙÒÁÖÅÎÉÅ -- ÏÎ ÎÅÐÒÁ×ÉÌØÎÏ ÜÔÏ ÄÕÍÁÅÔ...
HZ> á ÇÄÅ ÔÁÍ ×ÙÒÁÖÅÎÉÅ Ó side effects? éÎËÒÅÍÅÎÔ ÁÒÇÕÍÅÎÔÁ, ÞÔÏ ÌÉ? ôÕÔ HZ> ×ÓÅ HZ> ÎÏÒÍÁÌØÎÏ É ÞÅÔËÏ ÏÐÒÅÄÅÌÅÎÏ Ó ÔÏÞËÉ ÚÒÅÎÉÑ ÑÚÙËÁ - ÓÏÚÄÁÅÔÓÑ ËÏÐÉÑ 'b', HZ> ÐÏÔÏÍ HZ> üÔÏÔ ËÏÄ ÓÏ×ÅÒÛÅÎÎÏ ÌÅÇÁÌÅÎ, ÞÉÔÁÂÅÌÅÎ É ÕÄÏÂÅÎ. é ÚÁÄÎÉÃÁ ×ÏÚÎÉËÁÅÔ HZ> ÔÏÌØËÏ HZ> ÉÚ-ÚÁ ÍÁËÒÏÓÁ.
íÁËÒÏÓ ÎÉ × ޣÍ ÎÅ ×ÉÎÏ×ÁÔ. åÍÕ ÓËÁÚÁÌÉ ÚÁÍÅÎÉÔØ xxx ÎÁ yyy ÏÎ ÜÔÏ É ÓÄÅÌÁÌ... á side effects ÔÁÍ (x++) ÍÏÖÅÔ ÂÙÔØ. ðÏÒÑÄÏË ×ÙÞÉÓÌÅÎÉÑ ÁÒÇÕÍÅÎÔÏ× ÆÕÎËÃÉÉ ÎÅ ÏÐÒÅÄẠ̊Î. ÷ÏÔ ÜÔÏ ÇÒÁÂÌÉ:
char *x; f(*x++, *x++, *x++, *x++); // x[0] ÓËÏÒÅÊ ×ÓÅÇÏ ÏËÁÖÅÔÓÑ × _ÐÏÓÌÅÄÎÅÍ_ ÁÒÇÕÍÅÎÔÅ...
÷ÐÒÏÞÅÍ, Ï ÜÔÏ ÐÒÏÓÔÏ ÎÕÖÎÏ ÚÎÁÔØ.
YK>> int c = MAX(a, b); YK>> b++; HZ> ÷ÏÏÂÝÅ-ÔÏ, ÎÅ ×ÓÅÇÄÁ ÍÏÖÎÏ ÔÁË ÓÄÅÌÁÔØ - 'b' ÓÁÍÁ ÐÏ ÓÅÂÅ ÍÏÖÅÔ HZ> ÉÓÐÏÌØÚÏ×ÁÔØÓÑ ×ÎÕÔÒÉ ÆÕÎËÃÉÉ, ËÕÄÁ ÐÅÒÅÄÁÎÏ ÅÅ ÚÎÁÞÅÎÉÅ, Ô.Þ. ÜÔÏ HZ> ÎÅÐÏÌÎÏÃÅÎÎÁÑ ÚÁÍÅÎÁ.
íáëòïó üôï Hå æõHëãéñ. åçï õíùûìåHHï úáçìá÷Hùíé âõë÷áíé úáðéóáìé, þôïâù óòáúõ âùìï üôï úáíåôHï.
HZ> ÷ ÏÂÝÅÍ, Ô×ÏÉ ×ÏÚÒÁÖÅÎÉÑ ÄÁÖÅ ÎÁ ÏÔÍÁÚËÉ ÎÅ ÔÑÎÕÔ.
ô×ÏÉ ÔÏÖÅ. åÓÌÉ Ñ Ó×ÏÊ ÔÅËÓÔ C ÐÒÏÇÒÁÍÍÙ ÎÁÞÎÕ Åݣ ËÁËÉÍ ÄÒÕÇÉÍ ÍÁËÒÏ-ÐÒÏÃÅÓÓÏÒÏÍ ÏÂÒÁÂÁÔÙ×ÁÅÔØ, ÎÁÐÒÉÍÅÒ m4, ÔÏ ËÁËÉÅ ÍÏÇÕÔ ÂÙÔØ ÐÒÅÔÅÎÚÉÉ Ë ÓÁÍÏÍÕ C, ÅÓÌÉ Õ ÍÅÎÑ ×ÓÅ ÇÒÁÂÌÉ × ÍÁËÒÏÓÁÈ ÓÏÓÒÅÄÏÔÏÞÅÎÙ? þÅÇÏ ËÉÌÏÍÅÔÒÙ Ó ËÉÌÏÇÒÁÍÍÁÍÉ, ÔÏ ÅÓÔØ ÍÁËÒÏÓÙ Ó ÆÕÎËÃÉÑÍÉ ÒÁ×ÎÑÔØ?
HZ> ô.Å. ÉÈ ÌÕÞÛÅ ÎÅ ÉÓÐÏÌØÚÏ×ÁÔØ ÐÒÉ ÌÀÂÏÊ ×ÏÚÍÏÖÎÏÓÔÉ.
þÕÛØ. HÕ ÐÉÛÉ ×ÍÅÓÔÏ MAX(a, b) ËÁÖÄÙÊ ÒÁÚ ÇÒÏÍÏÚÄËÏÅ ×ÙÒÁÖÅÎÉÅ...