In the world of C programming, functions play a pivotal role in modularizing and optimizing code. Two advanced concepts that often arise when working with functions are callback functions and nested functions. These concepts allow developers to introduce flexibility and scope-specific functionality in their programs, making the code more dynamic and adaptable.
Callback Functions are a powerful tool that enable a function to pass another function as an argument. This allows the called function to execute the passed function at the appropriate time, such as when specific conditions are met or a task is completed. This technique is widely used to implement custom behavior while maintaining the modularity of the main function. For example, in a callback implementation, a function like addition
can accept another function, such as sum
, as an argument and execute it seamlessly.
This allows the called function to execute the passed function when certain conditions are met or after completing some tasks.
This technique is commonly used to implement custom behavior without modifying the called function’s code.
#include<stdio.h>
void sum(int result);
int addition( void *sum(int))
{
int result =10+5;
sum(result);
}
void sum(int result)
{
printf(“%d”,result);
}
int main()
{
/*int a=10;int *b=12;
int d=sum(&a,&b);
printf(“%d”,d);
addition(sum); // this is we called as callback function
}
In C, a function can be declared inside another function but cannot be defined there.
This concept, often referred to as lexical scoping, involves defining a function within the scope of another. However, lexical scoping is not supported in C because the compiler cannot resolve the correct memory location for the inner function.
#include<stdio.h>
int main()
{
void outer()
{
int a=10;
printf(“outer function”);
void inner()
{
printf(“%d”,a);
printf(“inner function”);
}
}
inner();
}
The above program is to throw an error
The above error can be resolved using resolved by using including the auto in the inner function
#include <stdio.h>
#include <math.h>
double area( register double a, register double b);
int main(){
double x = 20, y = 30;
printf(“%f”, function(x, y));
return 0;
}
double area(double a, double b)
{
auto double square ( double c)
{
return pow(c,2);
}
return square (a) + square (b);
}
Indian Institute of Embedded Systems – IIES