Майдони амал: тағйирёбанда дар куҷо зиндагӣ мекунад
Тағйирёбанда аз сатре, ки онро месозад, то }-е, ки блокашро мебандад, вуҷуд дорад. Ин порчаи код майдони амали он аст. Тағйирёбандае, ки дар дохили функсия сохта шудааст, барои он локалӣ аст. Ягон функсияи дигар онро намебинад. Ду функсия метавонанд ҳар кадом n ё i-и худро бе ягон бархурд дошта бошанд: инҳо тағйирёбандаҳои гуногун бо номи якхела мебошанд.
Истифодаи тағйирёбанда берун аз майдони амали он хатои компилятсия аст, масалан 'value' was not declared in this scope, вақте ки value-ро баъди }-и сиклеро истифода мебаред, ки онро сохтааст. Калимаҳои дақиқ аз компилятор вобастаанд.
Тағйирёбандаи локалӣ муддати зиндагии кӯтоҳ низ дорад. Он вақте ки даъват оғоз мешавад сохта мешавад ва вақте ки даъват тамом мешавад нест мешавад. Даъвати оянда аз сифр оғоз мешавад. Барои ҳамин функсия даъватҳои худро бо тағйирёбандаи локалӣ ҳисоб карда наметавонад: он дар ҳар даъват calls = 0-и нав аст.
Баромад
countLocal ҳар дафъа 1 медиҳад. countGlobal мешуморад: тағйирёбандаи он глобалӣ аст.
Тағйирёбандаҳои глобалӣ
total-и боло берун аз ҳамаи функсияҳо, дар аввали парванда сохта шудааст. Ҳар функсияи поёнтар онро хонда ва тағйир дода метавонад ва он то даме ки барнома кор мекунад зиндагӣ мекунад. Тағйирёбандаи глобалӣ худ аз худ аз 0 оғоз мешавад, дар ҳоле ки int sum;-и локалӣ то ба он қимат додан партов дорад.
Тағйирёбандаҳои глобалӣ дар барномасозии мусобиқавӣ барои ду кор маъмуланд: массивҳои калон ва маълумоте, ки ҳар функсия бо он кор мекунад. Массиви калони оддиро берун аз main мегузоранд: int grid[2000][2000]; 16 МБ мегирад. Ҳамчун тағйирёбандаи локалӣ он метавонад барномаро дар ҷое, ки стек хурд аст, вайрон кунад (дар бисёр компютерҳо тақрибан 8 МБ; ин довар бештар медиҳад, довари дигар шояд надиҳад). Ҳамчун глобалӣ он дар ҳама ҷо хуб аст. Вектор фарқ мекунад: ададҳои он дар қисми дигари хотира зиндагӣ мекунанд, бинобар ин вектор метавонад локалӣ бошад. Ҳар чизи дигар ҳамчун тағйирёбандаи локалӣ ва параметр равшантар аст. Ду домча:
- Агар тағйирёбандаи локалӣ ҳамон ном-ро дошта бошад, ки глобалӣ дорад, локалӣ онро дар дохили функсияи худ пинҳон мекунад.
int total = 0;-е, ки дар дохилиcountGlobalнавишта шудааст,total-и нави локалиро месозад ва глобалӣ ҳеҷ гоҳ тағйир намеёбад. - Бо якчанд тест тағйирёбандаи глобалӣ қимати тести пештараро нигоҳ медорад. Онро дар оғози ҳар кадом аз нав гузоред.