static – статикалық класты сипаттау үшін қолданылады,
regisrter – регистрлік класты сипаттау үшін қолданылады.
Автоматтық айнымалылар функция ішінде сипат-талған айнымалылар, егер жады класының басқа ай-қын сипатталуы болмаса, онда олар auto класына жа-татын болып саналады, яғни келісім бойынша функ-цияның ішінде сипатталған айнымалы автоматтық айнымалы болып саналады. Кейбір жағдайларда бе-рілген айнымалылар тек осы функцияның ішінде ғана сипатталған болса және осында ғана қолданылса, олар auto түйінді сөзі арқылы айқын сипаттала алады. Мысалы:
auto int m;
auto int b=12345;
auto float d=123.45;
auto char c;
Автоматтық айнымалыларды осындай етіп мінд-етті түрде сипаттау қажет емес. Егер айнымалы бір блок (функция басында) ішінде сипатталатын бол-са және оның класы көрсетілмесе, ол келісім бойын-ша автоматтық айнымалы болып саналады.
Автоматтық айнымалылар сол блокта ғана, яғни бір функция ішінде қолданылып, оның әсер ету аймағы локальді болады және осы айнымалылар сипатталған функция шақырылғанда ғана, көрсетілген автоматтық айнымалылар жұмыс істейді, яғни активтендіріледі (екпінді күйде пайдаланылады). Функцияның жұмы-сы аяқталғанда автоматтық айнымалылар жойылады да, оларға бөлініп берілген жадының ұяшықтарын басқа айнымалылар үшін қайтадан қолдануға болады.
Сыртқы айнымалылар. Функцияның сыртында сипатталатын айнымалылар сыртқы болып табы-лады. Олар функция ішінде қайта қолданылатын бол-са, extern түйінді сөзі арқылы сол айнымалы қайта сипатталатын болады. Олардың әсер ету аймағы гло-бальді болып саналады. Мысалы:
int t;
main()
{extern int t;
scanf(“%d”,&t);
while(t!=50)
pr();
printf(“Поиск завершен\n”);
}
pr()
{extern int t;
printf(“ввод следующего числа\n”);
scanf(“%d”,&t);
}
Егер pr()функциясында t айнымалысының сипат-талуы келтірілмесе де, t атты сыртқы айнымалы pr()функциясында келісім бойынша белгілі болып саналады. Егер main() және pr()функцияларында extern түйінді сөзі сол функциялар ішіндегі t ай-нымалысының сипатталуында келтірілмесе, онда t атты жаңа автоматты айнымалы пайда болады. Сонымен t атты сыртқы айнымалы бұл функциялар-да белгілі болмайды. Егер pr() функциясында t айнымалысының сипатталуында extern деген сөз жазылмаса, онда main()функциясында орналасқан t айнымалысы ешқашан жаңа мән қабылдай алмайды.
Статикалық айнымалылардыңқолданылу аймағы локальді болады, ал оның автоматтық айнымалылардан өзгешелігі: егер осы айнымалыны сипаттаған функция өз жұмысын аяқтаса да, статикалық айнымалылар мәні жойылмайды. Функцияны бір шақырғаннан оны келесі шақырғанға дейін компилятор статикалық айнымалының бұрынғы мәндерін есте сақтайды. Мысалы:
#include
int fun()
{ int av=1;
static int stv=1;
printf("av=%d stv=%d\n",av++,stv++);
}
main()
{ for(int k=1; k<=3; k++)
{ printf("%d-шы адым: ",k); fun(); }
getch();
}
Бұл программаның жұмыс нәтижесі:
1-адым: av=1 stv=1
2-адым: av=1 stv=2
3-адым: av=1 stv=3
Регистрлік айнымалыларды register түйінді сөзі анықтайды. Әдетте программада сипатталатын айнымалылар ЭЕМ жадында сақталады,ал регистрлік айнымалылар процессордағы регистрлерде сақталады. Осындай айнымалыларды пайдаланғанда, программаның жұмысы жылдамырақ орындалуы тиіс.
Жалпы жағдайда регистрлік айнымалылар автоматтық айнымалыға ұқсас. Егер регистрлік айнымалы программада сипатталса, осы сәтте бір регистр бос болса, онда компилятор керекті мәнді осы регистрде сақтайды деп саналады. Ал егер келтірілген талапты орындауға мүмкіндік болмаса, онда регистрлік айнымалы автоматтық айнымалы ретінде пайдаланылады.