{extern int l; printf(“ввод следующего числа \n”); scanf(“%d”,&l); } Егер pr() функциясында l айнымалысының сипатталуы келтірілмесе де, l атты сыртқы айнымалы pr() функциясында келісім бойынша белгілі болып саналады. Егер main() және pr() функцияларында extern түйінді сөзі сол функциялар ішіндегі l айнымалысының сипатталуында келтірілмесе, онда l әріпті жаңа автоматты айнымалы пайда болады. Сонымен l атты сыртқы айнымалы бұл функцияларда белгілі болмайды. Егер pr() функциясында l айнымалысының сипатталуында externдеген сөз жазылмаса, онда main()функциясында орналасқан l айнымалысы ешқашан жаңа мән қабылдай алмайды.
Статикалық айнымалылардың қолданылу аймағы локальді болады, ал оның автоматтық айнымалылардан өзгешелігі: егер осы айнымалыны сипаттаған функция өз жұмысын аяқтаса да, статикалық айнымалылар мәні жойылмайды. Функцияны бір шақырғаннан оны келесі шақырғанға дейін компилятор статикалық айнымалының бұрынғы мәндерін есте сақтайды. Мысалы:
// проверка статической переменной stv #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 түйінді сөзі анықтайды. Әдетте программада сипатталатын айнымалылар ЭЕМ жадында сақталады, ал регистрлік айнымалылар процессордегі регистрлерде сақталады. Осындай айнымалыларды пайдаланғанда, программаның жұмысы жылдамырақ орындалуы тиіс. Жалпы жағдайда регистрлік айнымалылар автоматтық айнымалыға ұқас. Егер регистрлік айнымалы программада сипатталса, осы сәтте бір регистр бос болса, онда компилятор керекті мәнді осы регистрде сақтайды деп саналады. Ал егер келтірілген талапты орындауға мүмкіндік болмаса, онда регистрлік айнымалы автоматтық айнымалы ретінде пайдаланылады.