Компилятор функцияны шақырудың дұрыстығын тексеруі үшін программа мәтінінде функцияны жариялау оны шақырудан ерте орналасуы тиіс . Функцияны жариялау ( прототип , тақырып , сигнатура ) оның атын , қайтарылатын мәнінің типін және берілетін параметрлер тізімін тағайындайды . Функцияны анықтауда , оны жариялаумен қатар , функция тұлғасы қамтылады , ол жүйелі жақшалар ішіндегі операторлар мен сипаттамалар тізбегінен тұрады : [ класс ] типі атауы ( [ параметрлер тізімі ] ) [ throw ( аластамалар ) ) { функция тұлғасы }
Функцияны анықтаудың құрама бөліктерін қарастырайық . o Міндетті түрде қажет етілмейтін класс модификаторының көмегімен , extern және stаtіс түйінді сөздерін қолдана отырып , функцияның көріну аймағын айқын түрде көрсетуге болады : extern функцияның программаның барлық модульдерінде ауқымды , Глобалды ( келісім бойынша ) түрде көрінуі ; • static функцияның тек өзі анықталған модуль шеңберінде көрінуі .
Функцияның қайтаратын мәнінің типі жиым функциядан ( бірақ жиымға немесе функцияға нұсқауыш бола алады ) басқа кез келген тип түрінде болуы мүмкін . Егер функция оны шақырған программаға ешқандай мән қайтармайтын болса , онда void типі көрсетіледі . о Параметрлер тізімі функцияға оны шақыру кезінде берілуі тиіс болатын шамаларды анықтайды . Параметрлер тізімінің элементтері бір - бірінен үтір арқылы ажыратылады . Функцияға берілетін әрбір параметрдің аты мен типі көрсетіледі ( жариялау кезінде оның атын көрсетпеуге де болады ) . o Функция арқылы өңделетін аластаулар .
Бір функциянының анықталуындағы , жариялануындағы және шақырылуындағы параметрлердің типтері мен жазылу реттілігі бір - бірімен сәйкес келу керек . Параметрлер аттарына олардың сәйкестігі бойынша шек қойылмайды , себебі функцияны әртүрлі аргументтермен шақыруға болады , ал прототиптердегі атауларды компилятор ескермейді ( олар тек программаның оқылуын жеңілдету үшін қолданылады ) . Қайтарылатын мәннің типі және параметрлердің типтері біріге отырып , функцияның типін анықтайды .
Функциядан шыққан кезде ол орналасқан стек аймағы босатылады , сондықтан бір функцияның бірнеше шақырылулары арасындағы жергілікті ( локалды ) айнымалылардың мәндері сақталмайды . Егер мұндай жағдайдан құтылу қажет болса , жергілікті айнымалыларды жариялау кезінде static модификаторы қолданылады : #include " stdafx.h " #include < iostream > using namespace System ; using namespace std ;
Қандай функцияны шақыру қажеттігін компилятор нақты параметрлер типіне байланысты анықтайды . Бұл процесс асыра жүктеудің рұқсатнамасы деп аталады ( resolution ағылшын сөзінің « нақтылау » мағынасындағы аудармасы ) . Функцияның қайтаратын мәнінің типі рұқсатнамаға әсер етпейді . Рұқсатнама механизмі айтарлықтай күрделі ережелер негізделген , олардың мағынасын қысқаша түрде былай қорытындылауға болады : функцияны барынша лайықты аргументтермен қолданып , ондай мүмкіндік табылмаса , қате туындағаны туралы хабарлама шығару қажет
#include " stdafx.h " #include < iostream > using namespace System ; using namespace std ; int sum ( int a , int b ) ; // функцияны жариялау int main ( ) { int a = 2 , b = 3 , c , d ; c = sum ( a , b ) ; // функцияны шақыру cin >> d ; cout << sum ( c , d ) ; // функцияны шакыру cout « " \ n \ n " ; system ( " pause " ) ; return 0 ; } int sum ( int a , int b ) { // функцияны анықтау return ( a + b ) ;
Достарыңызбен бөлісу: |