C Functions

Introduction to C Functions

कई बार आपके program में कुछ ऐसे statements हो सकते है जिन्हें आपको compiler से बार बार execute करवाने की आवश्यकता होती है। ऐसी situation में इन statements को बार बार लिखने में बहुत समय लग सकता है। साथ ही इससे program बहुत बड़ा हो जाता है जिससे उसे पढ़ने और समझने में मुश्किल होती है।

इस situation से बचने के लिए C आपको एक mechanism provide करती है जिसे function कहते है। जिन भी statements को आप program में कई जगह बार बार execute करवाना चाहते है उन्हें एक block में लिखते है और इस block को एक unique नाम देते है।

इसके बाद program में जँहा भी जितनी भी बार इन statements को आप execute करवाना चाहते है तब आप function के उस unique नाम के द्वारा उस function को call करते है। Call करते ही function (block) में लिखे गए सभी statements execute हो जाते है।

Function का name और parameters (इनके बारे में आप आगे पढ़ेंगे) जब आप लिखते है तो उसे function declaration कहा जाता है। जब आप function में execute होने वाले सभी statements लिखते है तो उसे function definition कहा जाता है। जब आप पूरे program में कँही भी function को use करते है तो उसे function call कहा जाता है।

किसी भी program में functions को use करने की advantages नीचे दी जा रही है।

  1. Functions create करने से programmer का time और computer की memory बचती है।
  2. एक ही code को आसानी से बार बार use किया जा सकता है। इससे code re-usability बढ़ती है।
  3. Program modules में divide हो जाता है जिससे उसे आसानी से manage और debug किया जा सकता है।
  4. Program की readability बढ़ती है।

C language में दो प्रकार के functions होते है।

  1. Predefined Functions
  2. User-defined Functions

Predefined Functions

Predefined functions वो functions होते है जो C library में पहले से ही provide किये गए है। इन function को पहले से ही declare और define किया गया होता है। बस इन्हें use करने के लिए header files को include करना होता है।

उदाहरण के लिए यदि आप अपने program में scanf() और printf() जैसे functions use करना चाहते है तो इसके लिए आप header file को अपने program में include करते है। ये दोनों ही predefined functions है।

Predefined functions के कुछ उदाहरण –

  • scanf()
  • printf()
  • strcpy()
  • void *malloc()
  • int to lower() आदि है।

User Defined Functions

User defined functions वो function होते है जो programmer (आप) खुद create करते है। Programmer अपनी आवश्यकता के अनुसार कितने भी functions create कर सकता है। ये functions कैसे create किये जाते है और इन्हें कैसे use किया जाता है।

Creating and Using C Functions

C में functions create करना और उन्हें use करना बहुत ही आसान है। इस process के 3 मुख्य steps होते है।

  1. Functions Declaration
  2. Function Definition
  3. Function Call

Function Declaration

इस part में आप function का नाम, उसका return type और parameters define करते है। Function declaration का general syntax नीचे दिया गया है।

<return-type> <function-name>(<list-of-parameters>);
  • return-type – आपका function execution complete होने पर किस प्रकार की value return करेगा ये आप return type के द्वारा define करते है। यदि आप एक addition का program बना रहे है जो 2 whole numbers को add करता है तो आपका return type int होगा।
  • function-name – ये आपके function का नाम होता है। ये पूरे program में unique होना चाहिए। जब आप function को call करते है तो इस नाम को ही लिखते है।
  • list-of-parameters – ये उन variables की list होती है जो आप function को call करते समय पास करेंगे। जैसे की यदि आप addition का function बना रहे है तो parameters के रूप में आप 2 numbers या 2 variables पास कर सकते है और फिर function के अंदर उनको add करके result show कर सकते है। यह आवश्यक नहीं की आप सभी functions में parameters define करें।

एक बात आपको हमेशा याद रखनी चाहिए की function declaration statement को आप semicolon से terminate करते है। लेकिन function definition के साथ ऐसा नहीं होता है। मान लीजिये की आप addition का function बना रहे है जो दो numbers को add करता है तो उसे आप इस प्रकार declare करते है।

/* A function declaration with two parameters */
int add(int a, int b);  

Function Definition

इस part को function body भी कहा जाता है। इसमें आप वो statements लिखते है जिन्हें आप execute करवाना चाहते है।

<return-type> <function-name>(<list-of-parameters>)
{
      statement 1;
      statement 2;
       .
       .
      statement N;

}

Function definition में return-type, function-name और list-of-parameters उसी प्रकार होते है जैसे की function declaration में होते है। इनके बाद में curly brackets के block में वो statements लिखे जाते है जो आप execute करवाना चाहते है।

यदि आप addition के function की बात करे तो उसकी definition आप इस प्रकार लिख सकते है।

/* Definition of add function */

int add(int a, int b)

{
    /* Statements to be executed when add function is called */
    int c;
    c = a+b;
    return c;
}

Function Call

Program में जब भी आप function को use करना चाहते है तो उसे call करते है।

<function-name>(<arguments-list>);

argument-list – arguments वो real values होती है जो आप functions को call करते समय पास करते है। ये values function definition में parameters को assign होती है। इसके बाद इन values पर processing होती है और result return किया जाता है।

Addition के function को call करते समय कोई 2 values पास करेंगे जैसे की 2 और 7, इनकी जगह variables भी pass किये जा सकते है जिनमें values store की गयी है।

ये values parameter variables a और b को assign हो जाएँगी और function के अंदर इन variables पर ही processing होती है। ऐसे functions जिनमें parameters defined किये गए है और यदि आप function call करते समय arguments पास नहीं करते है तो program में error आती है।

Addition के function को आप इस प्रकार call कर सकते है।

/* Calling add function with arguments 2 and 7*/
add(2,7);

C language में functions को 2 प्रकार से call किया जा सकता है।

  • Call by Value – इस तरीके में argument के रूप में values और variables पास किये जाते है।
  • Call by Reference – इस तरीके में argument के रूप में variables का reference पास किया जाता है।

Call by Value

जब आप function call करते समय argument के रूप में कोई value पास करते है तो वह parameter variables में copy हो जाती है और इसके बाद उन variables पर operations perform किये जाते है।

इसी प्रकार जब आप function को call करते समय कोई variable पास करते है तो असल में वह variable function में नहीं pass किया जाता है बल्कि उस variable की value parameter variable में copy की जाती है और उसके बाद उस parameter variable पर operations perform किये जाते है।

यदि ऊपर दिए गए addition के function को call करते समय दो integer variables x और y pass किये जाएँ तो ऐसा करने पर उन दोनों variables की value parameter variables a और b में copy हो जायेगी और उन पर addition perform करके result return किया जाएगा।

इस तरह के function call को call by value कहा जाता है। इसमें असल argument variables की value change नहीं होती है और जो भी operation होता है वह parameter variables पर ही perform होता है।

#include<stdio.h>

int add(int a, int b);
int main()
{
   int result;
   int x=5;
   int y=4;

   printf(“This addition is performed using function call by valuen”);
   /* Calling add function by value */
   result = add(x,y);
   printf(“n Result is : %d”,result);
   printf(“nn Value of a is %d and value of b is %d”,x,y);
}

/* Below function takes values from variables
as arguments and performs operations on them */

int add(int a, int b)
{
    int c;
    c=a+b;
    return c;
}
This addition is performed using function call by value
Result is 9
Value a is 5 and value of b is 4

Call by Reference

किसी function को call करते समय असल variables pass करने की बजाय उनका address भी पास किया जा सकता है। ऐसा करने पर उन variables का address parameter variables में copy होगा और parameter variable memory में असल argument variables को ही point करेंगे।

इस तरह के function call को call by reference कहा जाता है। इस तरह के function call में असल argument variables का address pass किया जाता है। ऐसा करने से function के अंदर यदि parameter variables की values में changes आते है तो उससे असल argument variables की values में भी changes आते है। यानी parameters में change आने पर arguments भी change हो जाते है।

इस तरह के function call में arguments को address of operator (&) के साथ pass किया जाता है। यह operator argument का address parameter variables को pass करता है। इसके अलावा function के declaration और definition में parameters को value at (*) operator के साथ define किया जाता है।

#include<stdio.h>

/* Function declaration with value at operator */
int add(int *s);

int main()
{
    int s=2;
    printf(“Call by Reference Demon”);
    /*  Function call with variable reference */
    add(&s);
    printf(“Sum is %dn”,s);
}

/* Function definition with value at operator */
int add(int *s)
{
     *s = *s+2;
     return 0;
}
Call by Reference Demo
Sum is 4

Example of C Functions

#include<stdio.h>
/* Function declaration */

int add(int a, int b);
int main()
{
   int result;
    printf(“This is  addition program using function!n”);
    /* Function call */
    result = add(2,7);  
    printf(“Result is : %d”, result);
 }

/* Function definition */

int add(int a, int b)
{
     int c;
     c = a + b;    
     return c;
}       
This is addition program using function!
Result is : 9