×

Advanced Coding & Software Engineering Program

Duration: 1 Year (12 Months)

Join our premium 1-year program to master cutting-edge technologies and become an industry-ready Software Engineer!

Course Coverage

  • Languages: C, C++, Java, JavaScript, Python
  • Web Technologies: HTML, CSS, Bootstrap 5, MERN Stack, Full Stack Development
  • Databases: MySQL, MongoDB
  • Data Science Libraries: Pandas, NumPy
  • Development Tools: Visual Studio Code, IntelliJ IDEA, PyCharm, Postman, Git, GitHub
  • Cloud Platforms: Vercel, MongoDB Atlas

Program Highlights

  • Live Classes: Interactive sessions with real-time doubt resolution
  • Hands-On Sessions: Practical coding exercises to build real-world skills
  • Industry Experts: Learn from professionals with years of experience
  • Live Project: Work on real-world projects to apply your skills
  • Get Certificate: Earn a professional certificate upon program completion

Course Fee: Only ₹1020 / month
Limited Period Offer!

C Programming: Functions – Complete Guide (Basic to Advanced)



Last Updated on: 18th Jul 2025 19:18:12 PM

Functions in C are the building blocks of modular programming, allowing you to break down complex tasks into reusable, organized code. Think of functions as mini-programs that perform specific tasks, making your code cleaner and easier to maintain. In this tutorial, we’ll explore functions from beginner to advanced levels, covering their syntax, types, and advanced concepts like recursion and function pointers. Each example includes code, output, and a detailed explanation to make learning engaging and clear. Let’s dive into the world of functions!.

 

1. Introduction to Functions

A function in C is a self-contained block of code that performs a specific task. It’s like a recipe: you provide inputs (ingredients), the function processes them, and it may produce an output (the dish). Functions can be called multiple times from different parts of a program, making them essential for structuring code.

 

Key Points:

  • Functions break down complex problems into smaller, manageable tasks.

  • They promote code reusability and maintainability.

  • C programs rely on functions, with main() being the entry point.

 

2. Why Use Functions?

Functions offer several benefits that make them indispensable in C programming:

  • Modularity: Divide code into logical units for easier development and debugging.

  • Reusability: Write a function once and use it multiple times with different inputs.

  • Readability: Well-named functions make code self-explanatory.

  • Maintainability: Updates to a function affect all its calls, simplifying changes.

  • Abstraction: Hide implementation details, focusing on what the function does, not how.

Example: Instead of writing code to calculate a square multiple times, a single square() function can be reused, saving time and reducing errors.

 

3. Basics of Functions

 

Function Declaration , Definition , and Call

  • Declaration: Specifies the function’s name, return type, and parameters (if any).

  • Definition: Contains the actual code of the function.

  • Calling: Invoking the function to execute its code.

 

4. Function Syntax in C

A function in C consists of a return type, name, optional parameters, and a body. Here’s the general

 

Syntax:

return_type function_name(parameter_list); // Declaration
return_type function_name(parameter_list) { // Definition
    // Code
    return value; // Optional, for non-void functions
}

 

  • return_type: The type of value returned (e.g., int, float, void for no return).

  • function_name: A unique name following C naming conventions.

  • parameter_list: Optional inputs (e.g., int x, float y).

  • return: Sends a value back to the caller (optional for void functions).

 

Basic Example: Function to Print a Message

#include <stdio.h>
// Declaration
void printMessage(void);
int main() {
    printMessage(); // Call
    return 0;
}
// Definition
void printMessage(void) {
    printf("Welcome to C programming!\n");
}

 

Output:

Welcome to C programming!

 

Explanation:

  • Declaration: void printMessage(void); informs the compiler about the function.

  • Definition: The function body prints a message.

  • Call: printMessage() in main executes the function.

 

Basic Example: Calculate Area of a Rectangle

This example defines a function to calculate the area of a rectangle.

#include <stdio.h>
float calculateArea(float length, float width) {
    return length * width;
}
int main() {
    float length = 5.0, width = 3.0;
    float area = calculateArea(length, width);
    printf("Area of rectangle (%.1f x %.1f) is %.1f\n", length, width, area);
    return 0;
}

 

Output:

Area of rectangle (5.0 x 3.0) is 15.0

Explanation:

  • The function calculateArea takes two float parameters (length, width) and returns their product.

  • In main, the function is called with length = 5.0 and width = 3.0, and the result (15.0) is stored in area.

  • The %.1f format ensures one decimal place in the output.

 

5. Types of Functions

Functions in C can be classified based on parameters and return values:

 

  1. No parameters, no return: void function(void)

  2. With parameters, no return: void function(int, int)

  3. No parameters, with return: int function(void)

  4. With parameters, with return: int function(int, int)

 

Functions can also be:

  • Library Functions: Built-in (e.g., printf, scanf in <stdio.h>).

  • User-Defined Functions: Created by the programmer.

 

6. Function with Parameters

Functions can accept parameters (inputs) to process different data.

 

Basic Example: Add Two Numbers

#include <stdio.h>
int add(int a, int b) {
    return a + b;
}
int main() {
    int x = 5, y = 3;
    int sum = add(x, y);
    printf("Sum of %d and %d is %d\n", x, y, sum);
    return 0;
}

 

Output:

Sum of 5 and 3 is 8

 

Explanation:

  • The add function takes two int parameters (a, b) and returns their sum.

  • In main, add(5, 3) passes x and y as arguments, and the result (8) is stored in sum.

 

7. Function with Return Value

Functions with a return type send a value back to the caller using return.

 

Basic Example: Check if a Number is Even

 

#include <stdio.h>
int isEven(int num) {
    return num % 2 == 0;
}
int main() {
    int num = 4;
    if (isEven(num)) {
        printf("%d is even.\n", num);
    } else {
        printf("%d is odd.\n", num);
    }
    return 0;
}

 

Output:

4 is even.

 

Explanation:

  • The isEven function returns 1 (true) if num is even, 0 (false) otherwise.

  • The main function uses the return value to print the appropriate message.

 

8. Call by Value vs Call by Reference

C supports two ways to pass parameters to functions:

 

  • Call by Value: Copies of arguments are passed; changes to parameters don’t affect the original variables.

  • Call by Reference: Pointers to variables are passed; changes to parameters affect the original variables.

 

Example: Call by Value and Call by Reference

 

#include <stdio.h>
void swapByValue(int a, int b) {
    int temp = a;
    a = b;
    b = temp;
}
void swapByReference(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}
int main() {
    int x = 10, y = 20;
    printf("Before swapByValue: x = %d, y = %d\n", x, y);
    swapByValue(x, y);
    printf("After swapByValue: x = %d, y = %d\n", x, y);
    
    printf("\nBefore swapByReference: x = %d, y = %d\n", x, y);
    swapByReference(&x, &y);
    printf("After swapByReference: x = %d, y = %d\n", x, y);
    return 0;
}

 

Output:

Before swapByValue: x = 10, y = 20
After swapByValue: x = 10, y = 20

 

Before swapByReference: x = 10, y = 20
After swapByReference: x = 20, y = 10

 

Explanation:

  • Call by Value (swapByValue): Copies of x and y are passed, so swapping a and b doesn’t affect x and y.

  • Call by Reference (swapByReference): Pointers &x and &y are passed, so changes to *a and *b modify the original x and y.

 

9. Recursion in Functions

A recursive function calls itself to solve a problem, requiring a base case to terminate.

 

Example: Recursive Power Function

This function calculates base raised to exponent recursively.

#include <stdio.h>
unsigned long long power(int base, int exponent) {
    if (exponent < 0) {
        printf("Error: Negative exponent not supported.\n");
        return 0;
    }
    if (exponent == 0) {
        return 1; // Base case
    }
    return base * power(base, exponent - 1); // Recursive case
}
int main() {
    int base = 2, exponent = 3;
    unsigned long long result = power(base, exponent);
    if (result != 0) {
        printf("%d raised to %d is %llu\n", base, exponent, result);
    }
    return 0;
}

 

Output:

2 raised to 3 is 8

 

Explanation:

  • The power function computes base^exponent (e.g., 2³ = 2 * 2 * 2 = 8).

  • Base case: exponent == 0 returns 1.

  • Recursive case: base * power(base, exponent - 1).

  • Negative exponents trigger an error with a return of 0.

 

Why Functions Are Essential

Functions make your C programs:

  • Modular: Break complex problems into smaller, manageable tasks.

  • Reusable: Call the same function multiple times with different inputs.

  • Maintainable: Simplify debugging and updates by isolating logic.

  • Flexible: Use function pointers or recursion for dynamic and powerful solutions.

 


Online - Chat Now
Let’s Connect

Inquiry Sent!

Your message has been successfully sent. We'll get back to you soon!

iKeySkills Logo